Firebase Data Connect obsługuje wyszukiwanie pełnotekstowe oparte na PostgreSQL. Wyszukiwanie pełnotekstowe umożliwia szybkie i skuteczne znajdowanie informacji w dużych zbiorach danych przez wyszukiwanie słów kluczowych i frazeologizmów w wielu kolumnach jednocześnie.
Możesz dodać do usługi wyszukiwanie pełnotekstowe. Najpierw dodaj dyrektywę @searchable
do String
w schemacie, w którym chcesz wyszukiwać. Przykład:
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
}
Po dodaniu tej dyrektywy możesz przeprowadzić wyszukiwanie pełnotekstowe, dodając do zapytania pole <pluralType>_search
. W tym przypadku będzie to:movies_search
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Dostrajanie wyników wyszukiwania pełnotekstowego
Możesz dostosować wyniki wyszukiwania pełnotekstowego, dodając argumenty do dyrektywy
@searchable
i pola _search
.
Wspólne argumenty
Wyniki wyszukiwania możesz kontrolować za pomocą wielu argumentów używanych w przypadku podstawowych pól listy<pluralType>
:
order
umożliwia zmianę kolejności wyników. Jeśli ten parametr zostanie pominięty, wyniki będą sortowane według trafności w kolejności malejącej.where
umożliwia dodawanie dodatkowych filtrów wyszukiwania (np. wyszukiwanie tylko filmów określonego gatunku).limit
powoduje, że zapytanie zwraca tylko X najlepszych wyników.offset
powoduje pominięcie pierwszych X wyników.distinct
dodaje do wygenerowanego kodu SQL operator DISTINCT.
Wybór języka
Domyślnie wyszukiwanie pełnotekstowe analizuje dokumenty w języku angielskim. Możesz to zmienić za pomocą argumentu language w dyrektywie @searchable
:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Określenie właściwego języka umożliwi PostgreSQL dokładne leksykalne wyodrębnianie rdzeni słów i pomoże zapewnić, że wyszukiwanie nie pominie trafnych wyników. Jeśli wyszukiwanie obejmuje wiele kolumn, wszystkie muszą być ustawione na ten sam język.
Języki | ||
---|---|---|
|
|
|
Korzystając z psql
, możesz uzyskać pełną listę za pomocą tego zapytania:
SELECT cfgname FROM pg_ts_config;
Format zapytania
Domyślnie wyszukiwanie pełnotekstowe używa semantyki internetowej w przypadku zapytań (podobnie jak wyszukiwarka Google). Możesz zmienić to zachowanie za pomocą argumentu queryFormat
w polu <pluralType>_search
.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Dostępne są 4 opcje formatu zapytania:
- QUERY zapewnia wyszukiwarkom internetowym znaną semantykę (np. ciągi znaków w cudzysłowie, operatory AND i OR). Jest to ustawienie domyślne.
- PLAIN pasuje do wszystkich słów, ale niekoniecznie razem („brązowy pies” będzie pasować do „brązowo-białego psa” lub „biało-brązowego psa”).
- WYRAŻENIE dopasowuje dokładnie wyrażenie („brązowy pies” będzie pasować do „biało-brązowego psa”, ale nie do „brązowo-białego psa”).
- ZAAWANSOWANE umożliwia tworzenie złożonych zapytań za pomocą pełnego zestawu operatorów tsquery.
Próg trafności
Ustawienie progu trafności oznacza, że wyszukiwanie będzie zwracać tylko wyniki o wartości trafności powyżej określonego progu. W wielu przypadkach nie musisz tego ustawiać – każdy wynik o trafności większej niż 0 będzie trafny.
Jeśli jednak wyniki wyszukiwania nie są dla Ciebie odpowiednie, możesz je odfiltrować za pomocą progu trafności.
Aby określić odpowiednią wartość progu trafności, przeprowadź kilka wyszukiwań testowych i sprawdź _metadata.relevance
:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Wybierz próg, który pomija wyniki, które uważasz za nieistotne. Aby to zrobić:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Wybieranie między wyszukiwaniem pełnotekstowym, wyszukiwaniem podobieństwa wektorowego a filtrami wzorców ciągów tekstowych
Data Connect oferuje kilka różnych sposobów przeszukiwania bazy danych.
Skorzystaj z tej tabeli, aby wybrać odpowiedni typ w swoim przypadku użycia.
Wyszukiwanie pełnotekstowe | Wyszukiwanie podobieństwa wektorowego | Filtry wzorców ciągów znaków |
---|---|---|
Dobrze sprawdza się w przypadku implementowania ogólnej funkcji wyszukiwania. | Przydatne do znajdowania wierszy podobnych semantycznie (np. rekomendacji lub „Więcej podobnych”) | Dobre w przypadku dokładnych dopasowań tekstu lub wyszukiwania opartego na wyrażeniach regularnych |
Przeprowadza leksykalne obcinanie wyrazów, które pomaga dopasowywać różne formy lub czasy tego samego słowa. | Wymaga Vertex AI | Zużywa najmniej pamięci i miejsca na dysku, ponieważ nie wymaga indeksów ani wygenerowanych kolumn. |
Można je wykonywać w wielu kolumnach tabeli. | Działa tylko w przypadku jednej kolumny naraz | Można go zastosować do wielu kolumn w tabeli za pomocą filtrów OR. |
Wydajność w przypadku większych dokumentów | Wydajne w przypadku dużych dokumentów | Mniejsza wydajność podczas wyszukiwania w większych dokumentach |
Zwiększa obciążenie pamięci i miejsca na dane, ponieważ trzeba przechowywać wygenerowaną kolumnę i indeks dla każdego wyszukiwania. |