Thực hiện tìm kiếm toàn văn bằng SQL Connect

Firebase SQL Connect hỗ trợ phương thức tìm kiếm toàn bộ văn bản, được hỗ trợ bởi PostgreSQL. Phương thức tìm kiếm toàn bộ văn bản giúp bạn nhanh chóng và hiệu quả tìm thấy thông tin trong các tập dữ liệu lớn bằng cách tìm kiếm từ khoá và cụm từ trên nhiều cột cùng một lúc.

Bạn có thể thêm phương thức tìm kiếm toàn bộ văn bản vào dịch vụ của mình. Trước tiên, hãy thêm chỉ thị @searchable vào String trong lược đồ mà bạn muốn tìm kiếm. Ví dụ:

type Movie
  @table {

  # The fields you want to search over
  title: String! @searchable
  genre: String @searchable
  description: String @searchable
  tags: [String]

  # Some other fields that we won't search over
  rating: Float
  imageUrl: String!
  releaseYear: Int
}

Sau khi thêm chỉ thị này, bạn có thể thực hiện phương thức tìm kiếm toàn bộ văn bản bằng cách thêm trường <pluralType>_search vào một truy vấn. Trong trường hợp này, đó sẽ là movies_search:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    imageUrl
    releaseYear
    genre
    rating
    tags
    description
  }
}

Tinh chỉnh kết quả tìm kiếm toàn bộ văn bản

Bạn có thể tinh chỉnh kết quả tìm kiếm toàn bộ văn bản bằng cách thêm đối số vào chỉ thị @searchable và trường _search;

Đối số được chia sẻ

Bạn có thể kiểm soát kết quả tìm kiếm bằng nhiều đối số giống nhau được dùng cho các trường danh sách cơ bản <pluralType>:

  • order cho phép bạn thay đổi thứ tự của kết quả. Nếu bạn bỏ qua đối số này, kết quả sẽ được sắp xếp theo mức độ liên quan giảm dần.
  • where cho phép bạn thêm bộ lọc bổ sung để tìm kiếm (ví dụ: chỉ tìm kiếm phim thuộc một thể loại cụ thể).
  • limit chỉ trả về X kết quả hàng đầu.
  • offset bỏ qua X kết quả đầu tiên.
  • distinct thêm toán tử DISTINCT vào SQL đã tạo.

Lựa chọn ngôn ngữ

Theo mặc định, phương thức tìm kiếm toàn bộ văn bản sẽ phân tích cú pháp tài liệu bằng tiếng Anh. Bạn có thể thay đổi điều này bằng đối số ngôn ngữ trên chỉ thị @searchable:

type Movie
  @table {
  title: String! @searchable(language: "french")
  ...
}

Việc chỉ định đúng ngôn ngữ sẽ cho phép PostgreSQL thực hiện việc rút gọn từ vựng chính xác và giúp đảm bảo rằng nội dung tìm kiếm của bạn không bỏ sót các kết quả có liên quan. Nếu bạn đang tìm kiếm trên nhiều cột, thì tất cả các cột đó phải được đặt thành cùng một ngôn ngữ.

Ngôn ngữ
  • đơn giản
  • tiếng Ả Rập
  • tiếng Armenia
  • tiếng Basque
  • tiếng Catalan
  • tiếng Đan Mạch
  • tiếng Hà Lan
  • tiếng Anh
  • tiếng Estonia
  • tiếng Phần Lan
  • tiếng Pháp
  • tiếng Đức
  • tiếng Hy Lạp
  • tiếng Hindi
  • tiếng Hungary
  • tiếng Indonesia
  • tiếng Ireland
  • tiếng Ý
  • tiếng Lithuania
  • tiếng Nepal
  • tiếng Na Uy
  • tiếng Bồ Đào Nha
  • tiếng Romania
  • tiếng Nga
  • tiếng Serbia
  • tiếng Tây Ban Nha
  • tiếng Thuỵ Điển
  • tiếng Tamil
  • tiếng Thổ Nhĩ Kỳ
  • tiếng Yiddish

Chúng tôi hỗ trợ tất cả các ngôn ngữ mà phương thức tìm kiếm toàn bộ văn bản của PostgreSQL hỗ trợ. Khi sử dụng psql, bạn có thể xem danh sách đầy đủ bằng truy vấn sau.

SELECT cfgname FROM pg_ts_config;

Định dạng truy vấn

Theo mặc định, phương thức tìm kiếm toàn bộ văn bản sử dụng ngữ nghĩa web cho các truy vấn (tương tự như Google Tìm kiếm). Bạn có thể thay đổi hành vi này bằng đối số queryFormat trên trường <pluralType>_search.

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, queryFormat: PHRASE) {
    ...
  }
}

Có 4 lựa chọn cho định dạng truy vấn:

  • QUERY cung cấp ngữ nghĩa quen thuộc cho các công cụ tìm kiếm trên web (ví dụ: chuỗi được trích dẫn, AND và OR). Đây là định dạng mặc định.
  • PLAIN khớp với tất cả các từ, nhưng không nhất thiết phải khớp với nhau ("brown dog" sẽ khớp với "the brown and white dog" hoặc "the white and brown dog").
  • PHRASE khớp với một cụm từ chính xác ("brown dog" sẽ khớp với "the white and brown dog", nhưng sẽ không khớp với "brown and white dog").
  • NÂNG CAO cho phép bạn tạo các truy vấn phức tạp bằng toàn bộ toán tử tsquery.

Ngưỡng liên quan

Việc đặt ngưỡng liên quan có nghĩa là nội dung tìm kiếm của bạn sẽ chỉ trả về các kết quả có giá trị liên quan cao hơn một giá trị nhất định. Trong nhiều trường hợp, bạn sẽ không cần đặt ngưỡng này – mọi kết quả có mức độ liên quan lớn hơn 0 sẽ là kết quả có liên quan.

Tuy nhiên, nếu nhận thấy rằng nội dung tìm kiếm của bạn đang trả về các kết quả không liên quan, thì ngưỡng liên quan có thể lọc các kết quả đó cho bạn.

Để xác định giá trị phù hợp cho ngưỡng liên quan, bạn nên thực hiện một vài lượt tìm kiếm thử nghiệm và xem _metadata.relevance:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    _metadata {
      relevance
    }
    ...
  }
}

Chọn một ngưỡng bỏ qua các kết quả mà bạn cảm thấy không liên quan. Cách làm như sau:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, relevanceThreshold: 0.05) {
    id
    title
    ...
  }
}

Lựa chọn giữa phương thức tìm kiếm toàn bộ văn bản, phương thức tìm kiếm mức độ tương đồng vectơ và bộ lọc mẫu chuỗi

SQL Connect cung cấp một số cách để tìm kiếm trên cơ sở dữ liệu của bạn.

Hãy sử dụng bảng này để giúp bạn chọn cách phù hợp với trường hợp sử dụng của mình.

Phương thức tìm kiếm toàn bộ văn bản Phương thức tìm kiếm mức độ tương đồng vectơ Bộ lọc mẫu chuỗi
Phù hợp để triển khai chức năng tìm kiếm chung Phù hợp để tìm các hàng tương tự về mặt ngữ nghĩa (ví dụ: đề xuất hoặc "Xem thêm nội dung tương tự") Phù hợp để tìm kết quả khớp chính xác với văn bản hoặc tìm kiếm bằng biểu thức chính quy
Thực hiện việc rút gọn từ vựng, giúp khớp với các dạng hoặc thì khác nhau của cùng một từ Yêu cầu Vertex AI Sử dụng ít bộ nhớ và dung lượng ổ đĩa nhất, vì không yêu cầu bất kỳ chỉ mục hoặc cột nào được tạo
Có thể thực hiện trên nhiều cột trong một bảng Chỉ hoạt động cho một cột tại một thời điểm Có thể thực hiện trên nhiều cột trong một bảng bằng cách sử dụng bộ lọc OR filters
Hiệu suất cao trên các tài liệu lớn hơn Hiệu suất cao trên các tài liệu lớn Hiệu suất thấp hơn khi tìm kiếm các tài liệu lớn hơn
Thêm bộ nhớ và chi phí lưu trữ để lưu trữ một cột được tạo và một chỉ mục cho mỗi lượt tìm kiếm