Veri Bağlantısı ile tam metin araması yapma

Firebase Data Connect, PostgreSQL tarafından desteklenen tam metin arama özelliğini destekler. Tam metin araması, aynı anda birden fazla sütunda anahtar kelimeler ve ifadeler arayarak büyük veri kümelerindeki bilgileri hızlı ve verimli bir şekilde bulmanızı sağlar.

Hizmetinize tam metin arama ekleyebilirsiniz. Öncelikle, şemanızda arama yapmak istediğiniz String öğesine @searchable yönergesini ekleyin. Örneğin:

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
}

Bu yönergeyi ekledikten sonra <pluralType>_search alanını bir sorguya ekleyerek tam metin araması yapabilirsiniz. Bu durumda, movies_search olur:

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

Tam metin arama sonuçlarına ince ayar yapma

@searchable yönergesine ve _search alanına bağımsız değişkenler ekleyerek tam metin arama sonuçlarını hassaslaştırabilirsiniz.

Paylaşılan bağımsız değişkenler

Arama sonuçlarını, temel liste alanları için kullanılan argümanların çoğuyla kontrol edebilirsiniz <pluralType>:

  • order, sonuçların sırasını değiştirmenize olanak tanır. Atlanırsa sonuçlar alaka düzeyine göre azalan sırada sıralanır.
  • where, arama için ek filtreler eklemenize olanak tanır (ör. yalnızca belirli bir türdeki filmleri arama).
  • limit, sorgunun yalnızca en iyi X sonucu döndürmesini sağlar.
  • offset, sorgunun ilk X sonucu atlamasını sağlar.
  • distinct, oluşturulan SQL'ye DISTINCT operatörünü ekler.

Dil seçimi

Varsayılan olarak, tam metin arama dokümanları İngilizce olarak ayrıştırır. Bu ayarı @searchable yönergesindeki dil bağımsız değişkeniyle değiştirebilirsiniz:

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

Doğru dili belirtmek, PostgreSQL'in doğru sözcüksel kök alma işlemi yapmasına ve aramanızın alakalı sonuçları kaçırmamasına yardımcı olur. Birden fazla sütunda arama yapıyorsanız tüm sütunlar aynı dile ayarlanmalıdır.

Diller
  • basit
  • arabic
  • armenian
  • basque
  • Katalanca
  • danish
  • dutch
  • turkish
  • finnish
  • french
  • german
  • greek
  • hintçe
  • Macarca
  • indonesian
  • irish
  • italian
  • Litvanca
  • nepali
  • norwegian

psql kullanarak aşağıdaki sorguyla tam listeyi alabilirsiniz.

SELECT cfgname FROM pg_ts_config;

Sorgu biçimi

Varsayılan olarak, tam metin arama sorgular için web semantiğini kullanır (Google Arama'ya benzer). Bu davranışı <pluralType>_search alanındaki queryFormat bağımsız değişkeniyle değiştirebilirsiniz.

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

Sorgu biçimi için dört seçenek vardır:

  • QUERY, web arama motorlarına tanıdık semantikler (ör. tırnak içine alınmış dizeler, AND ve OR) sağlar. Bu, varsayılan seçenektir.
  • PLAIN, tüm kelimelerle eşleşir ancak kelimelerin birlikte olması gerekmez ("kahverengi köpek", "kahverengi ve beyaz köpek" veya "beyaz ve kahverengi köpek" ile eşleşir).
  • PHRASE tam olarak bir kelime öbeğiyle eşleşir ( "kahverengi köpek", "beyaz ve kahverengi köpek" ile eşleşir ancak "kahverengi ve beyaz köpek" ile eşleşmez).
  • GELİŞMİŞ, tsquery operatörlerinin tam setini kullanarak karmaşık sorgular oluşturmanıza olanak tanır.

Alaka düzeyi eşiği

Alaka düzeyi eşiği ayarladığınızda aramanız yalnızca belirli bir alaka düzeyi değerinin üzerindeki sonuçları döndürür. Çoğu durumda bunu ayarlamanız gerekmez. Alaka düzeyi 0'dan büyük olan tüm sonuçlar alakalı sonuç olarak kabul edilir.

Ancak aramanızın alakalı olmayan sonuçlar döndürdüğünü fark ederseniz alaka düzeyi eşiği bu sonuçları sizin için filtreleyebilir.

Alaka düzeyi eşiği için uygun bir değer belirlemek üzere birkaç test araması yapmanız ve _metadata.relevance'ya bakmanız gerekir:

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

Alakasız olduğunu düşündüğünüz sonuçları hariç tutan bir eşik seçin. Bunu yapmak için:

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

Tam metin araması, vektör benzerliği araması ve dize kalıbı filtreleri arasında seçim yapma

Data Connect, veritabanınızda arama yapmanın birkaç farklı yolunu sunar.

Kullanım alanınıza uygun olanı seçmek için bu tablodan yararlanabilirsiniz.

Tam metin arama Vektör benzerliği araması Dize kalıbı filtreleri
Genel arama işlevselliğini uygulamak için uygundur. Anlamsal olarak benzer satırları bulmak için uygundur (ör. öneriler veya "Bunun gibi daha fazla"). Tam metin eşleşmeleri veya normal ifade aramaları için uygundur.
Aynı kelimenin farklı biçimlerinin veya zamanlarının eşleştirilmesine yardımcı olan sözcüksel kök alma işlemi gerçekleştirir. Vertex AI gerektirir Herhangi bir dizin veya oluşturulmuş sütun gerektirmediğinden en az bellek ve disk alanı kullanır.
Tablodaki birden fazla sütunda gerçekleştirilebilir. Yalnızca tek bir sütun için çalışır. OR filtreleri kullanılarak bir tablodaki birden fazla sütunda gerçekleştirilebilir.
Daha büyük dokümanlarda daha iyi performans Büyük dokümanlarda yüksek performans Daha büyük belgelerde arama yaparken daha düşük performans gösterir.
Oluşturulan bir sütunu ve her arama için bir dizini depolamak üzere bellek ve depolama alanı ekler.