Firebase SQL 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 wyrażeń w wielu kolumnach naraz.
Możesz dodać wyszukiwanie pełnotekstowe do swojej usługi. Najpierw dodaj dyrektywę @searchable do ciągu 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
pole <pluralType>_search do zapytania. 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 dostroić wyniki wyszukiwania pełnotekstowego, dodając argumenty do dyrektywy @searchable i pola _search.
Argumenty współdzielone
Wyniki wyszukiwania możesz kontrolować za pomocą wielu tych samych argumentów, które są używane w przypadku podstawowych
pól listy <pluralType>:
orderumożliwia zmianę kolejności wyników. Jeśli ten argument zostanie pominięty, wyniki będą uporządkowane według malejącej trafności.whereumożliwia dodawanie dodatkowych filtrów do wyszukiwania (np. wyszukiwanie tylko filmów określonego gatunku).limitsprawia, że zapytanie zwraca tylko X najlepszych wyników.offsetsprawia, że zapytanie pomija pierwsze X wyników.distinctdodaje 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 odpowiedniego języka umożliwi PostgreSQL dokładne leksykalne sprowadzanie do rdzenia i pomoże zapewnić, że wyszukiwanie nie pominie istotnych wyników. Jeśli wyszukujesz w wielu kolumnach, wszystkie muszą być ustawione na ten sam język.
| Języki | ||
|---|---|---|
|
|
|
Obsługujemy wszystkie języki obsługiwane przez wyszukiwanie pełnotekstowe w PostgreSQL. Za pomocą psql możesz uzyskać pełną listę, korzystając z 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 semantykę podobną do semantyki wyszukiwarek internetowych (np. ciągi w cudzysłowie, AND i OR). Jest to ustawienie domyślne.
- PLAIN dopasowuje wszystkie słowa, ale niekoniecznie razem („brązowy pies” będzie pasować do „brązowo-białego psa” lub „biało-brązowego psa”).
- PHRASE dopasowuje dokładne wyrażenie („brązowy pies” będzie pasować do „biało-brązowego psa”, ale nie do „brązowo-białego psa”).
- ZAŁAWANSOWANE 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 powyżej określonej wartości trafności. W wielu przypadkach nie trzeba tego ustawiać – każdy wynik o trafności większej niż 0 będzie wynikiem trafnych.
Jeśli jednak okaże się, że wyszukiwanie zwraca wyniki, które nie są trafne, próg trafności może je odfiltrować.
Aby określić odpowiednią wartość progu trafności, wykonaj kilka wyszukiwań testowych i sprawdź wartość _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
SQL Connect oferuje kilka różnych sposobów przeszukiwania bazy danych.
Skorzystaj z tej tabeli, aby wybrać odpowiedni sposób dla swojego przypadku użycia.
| Wyszukiwanie pełnotekstowe | Wyszukiwanie podobieństwa wektorowego | Filtry wzorców ciągów |
|---|---|---|
| Przydatne do implementowania ogólnej funkcji wyszukiwania | Przydatne do znajdowania wierszy podobnych pod względem semantycznym (np. rekomendacji lub sekcji „Podobne”) | Przydatne do dokładnych dopasowań tekstu lub wyszukiwania za pomocą wyrażeń regularnych |
| Wykonuje leksykalne sprowadzanie do rdzenia, co pomaga dopasować różne formy lub czasy tego samego słowa | Wymaga Vertex AI | Zużywa najmniej pamięci i miejsca na dysku, ponieważ nie wymaga żadnych indeksów ani wygenerowanych kolumn |
| Może być wykonywane w wielu kolumnach tabeli | Działa tylko w przypadku pojedynczej kolumny | Może być wykonywane w wielu kolumnach tabeli za pomocą filtrów OR |
| Wydajne w przypadku większych dokumentów | Wydajne w przypadku dużych dokumentów | Mniej wydajne podczas wyszukiwania w większych dokumentach |
| Dodaje obciążenie pamięci i miejsca na dysku, aby przechowywać wygenerowaną kolumnę i indeks dla każdego wyszukiwania |