Wykonywanie wyszukiwania pełnotekstowego za pomocą SQL Connect

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>:

  • order umożliwia zmianę kolejności wyników. Jeśli ten argument zostanie pominięty, wyniki będą uporządkowane według malejącej trafności.
  • where umożliwia dodawanie dodatkowych filtrów do wyszukiwania (np. wyszukiwanie tylko filmów określonego gatunku).
  • limit sprawia, że zapytanie zwraca tylko X najlepszych wyników.
  • offset sprawia, że zapytanie pomija pierwsze 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 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
  • To proste!
  • arabski
  • ormiański
  • baskijski
  • kataloński
  • duński
  • niderlandzki
  • english
  • estoński
  • fiński
  • francuski
  • niemiecki
  • grecki
  • hindi
  • węgierski
  • indonezyjski
  • irlandzki
  • włoski
  • litewski
  • nepalski
  • norweski
  • portugalski
  • rumuński
  • rosyjski
  • serbski
  • hiszpański
  • szwedzki
  • tamilski
  • turecki
  • jidysz

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