synonimy w Elasticsearch (HowTo)

wkrótce po rozpoczęciu podróży do wyszukiwania, w rzeczywistości jest to całkowicie niezależne od konkretnej Wyszukiwarki, staniesz w obliczu sytuacji, w której musisz obsługiwać słowa, które mają to samo znaczenie.

na przykład, jeśli pozwolisz swoim użytkownikom wyszukiwać według lokalizacji, niektóre mogą odnosić się do Wielkiej Brytanii jako UK lub do Stanów Zjednoczonych Ameryki jako USA, ale ta sytuacja nie ogranicza się do lokalizacji, takie rzeczy jak Doktorat są często określane jako stopień doktora lub doktora.

jako pierwszy krok powinieneś określić, czy jesteś w sytuacji z jednym słowem synonimami, czy wieloma słowami, nie jest to z pewnością nic nieistotnego dla Systemów wyszukiwania opartych na Lucene. Historycznie Lucene radził sobie z wieloma synonimami słów bardzo źle, w zasadzie trzeba było zbudować im czas indeksowania, z późniejszą listą problemów. Jeśli jesteś ciekawy, śledź tę serię dla przyszłych postów.

jeśli masz głodny umysł techniczny, to jest kilka istotnych kwestii i linków dla Ciebie:

w tym poście skupimy się na tym, jak rozwiązać ten problem w Elasticsearch w czasie zapytań, w kolejnym poście zajmiemy się synonimami czasu indeksowania i ich zaletami i wadami.

synonimy są obsługiwane w Elasticsearch i Solr, jako część łańcucha transformacji zapytań / indeksowania. Jeśli nie jesteś zaznajomiony z mapowaniem otworów i analizą części w Elasticsearch, polecam, aby przed przejściem do przodu nadrobić zaległości w tych częściach, ponieważ będziemy Ostro się na nich skupiać w tej części.

w przypadku pojedynczych słów lub synonimów opartych na tokenie użyjemy w Elasticsearch filtru synonimów. Pierwszym krokiem byłoby rozszerzenie bieżącego łańcucha analizy o synonym_token_filter, twoja definicja mapowania powinna wyglądać mniej więcej tak:

Elasticsearch Prośba o skonfigurowanie nowego indeksu z filtrem synonimów w łańcuchu analizy.

na tym obrazku widzimy, że zdefiniowaliśmy nowy filtr o nazwie jobs_synonym_filter typu synonim i uwzględniliśmy dwie definicje synonimów. Po zdefiniowaniu filtra należy umieścić go w analizatorze, co widać w drugiej konfiguracji poprzedniego obrazu.

od teraz możemy użyć wcześniej zdefiniowanego analizatora do przetwarzania tekstu, pamiętaj, że tak jak w przypadku każdego innego wejścia, indeksu lub czasu zapytania, Elasticsearch użyje wybranego łańcucha do rozbicia go w tokeny, filtrowania i wzbogacania go przed sprawdzeniem odwróconego indeksu.

Elasticsearch daje nam standardowy sposób sprawdzania, jak zachowują się analizatory, więc nie jesteśmy zmuszeni do ich sprawdzania podczas indeksowania lub zapytań. Jeśli chcesz sprawdzić, jak zachowuje się analizator, możesz użyć punktu końcowego _analyze.

na przykład, jeśli chcemy sprawdzić zachowanie wcześniej zdefiniowanego analizatora, możemy pomyśleć o kilku wiarygodnych słowach, PhD i Cop, w zdaniu będą one tłumaczone jako:

  • PhD John Doe → Doctor John Doe
  • Cop John Doe → Police John Doe

na następnym obrazku widzimy przykład tego, jak to działa wewnątrz Elasticsearch, możemy zobaczyć, jak generowane są różne tokeny, w tym Typ. Typ będzie synonimem, gdy jeden z tokenów został wygenerowany z tabeli synonimu.

sprawdzanie nowego niestandardowego analizatora i sposobu obsługi różnych tokenów

jednak w tym przykładzie możemy zacząć dostrzegać jeden z problemów z pojedynczymi synonimami tokenów, Mapy PhD do lekarza, jednak lekarz nie zawsze oznacza tylko Doktorat, może również oznaczać lekarza lub lekarza.

możemy pomyśleć o obsłudze tego synonimu z tą samą strukturą, jednak nie będzie to możliwe, ponieważ łańcuch analizy wygeneruje jeden token dla każdego słowa, co sprawi, że zadanie poprzedniego filtra synonimów nie powiedzie się. Sprawdź następne zdjęcie,

jak lekarz medyczny jest przetwarzany z wcześniej zdefiniowanym filtrem synonimów

możesz zobaczyć, jak słowo lekarz medyczny nie jest poprawnie przetwarzane z zdefiniowanymi synonimami. Istnieje na to rozwiązanie, filtr synonimów wielu słów.

synonimy wielu słów

właściwe obchodzenie się z tą sprawą w ramach rodziny wyszukiwarek opartych na Lucene jest trochę trudne, możesz się zastanawiać dlaczego?, dzieje się tak dlatego, że ogólna strategia Lucene polega na podziale tekstu na pojedyncze tokeny.

istnieje kilka strategii rozwiązania tej sytuacji, na przykład:

  • redukcja wielowyrazowych synonimów do formy kanonicznej.
  • Połącz powiązane tokeny razem i zbuduj stamtąd synonimy.
  • przy użyciu nowo utworzonego filtra wykresu synonimów.

nie będziemy opisywać w tym wpisie pierwszych dwóch, Sprawdź nadchodzące posty, aby uzyskać więcej informacji na ich temat. W tym wpisie skupimy się na filtrze grafu synonimów, bardziej inteligentnym filtrze tokenów w Lucene zdolnym do obsługi nie tylko tokenów, ale ogólnej zależności między słowami.

aby użyć filtra grafu synonimu należy zadeklarować go w podobny sposób jak w przypadku filtra wprowadzonego w poprzedniej sekcji, powinien wyglądać podobnie do następnego obrazu:

Zbuduj nowy filtr oparty na filtrze grafu synonimów (synonimy zdefiniowane bezpośrednio w żądaniu)

w tym przykładzie zdefiniowaliśmy trzy synonimy bezpośrednio w tworzeniu łańcucha analizy, jednak lepiej jest ustawić listę synonimów za pomocą pliku konfiguracyjnego. Synonimy mogą być wprowadzane za pomocą formatu Solr / Lucene lub WordNet.

jeśli nigdy nie słyszałeś o Wordnecie, warto sprawdzić!. WordNet to duża baza leksykalna języka angielskiego, rzeczowniki, czasowniki, przymiotniki, przysłówki są zgrupowane w zestaw synonimów i wiele innych. Tego rodzaju leksykalne bazy danych są bardzo przydatne, gdy próbujesz uzyskać bogatsze zrozumienie tekstu. Istnieją podobne pojęcia dla innych języków, takich jak niemiecki z GermaNet.

w następnych kilku zdjęciach można było zobaczyć, jak działają nowe synonimy,

sprawdzanie lekarza z nowym filtrem synonimów

sprawdzanie System Engineer z nowym filtrem synonimów

zobacz, jak Elasticsearch był na tyle inteligentny, aby dowiedzieć się, jak działać na jednym synonimie słowa, takim jak lekarz, ale także jak radzić sobie z inżynierem systemowym.

ale jak mówią Hiszpanie “no es oro todo lo que reluce” lub po angielsku, nie wszystko będzie łatwe. Istnieje kilka zaleceń, które zamierzamy zbadać również w dalszych wpisach, jednak w skrócie, jeśli używasz synonimów w Elasticsearch, wolisz fraze_query niż query_string, możesz zobaczyć na następnych zdjęciach, jak działają.

debugowanie zapytań z dopasowaną frazą

debugowanie zapytań za pomocą ciągu zapytania

możesz zobaczyć, jak ostatni obraz, ten, który używa query_string, nie generuje odpowiednich terminów zapytań, aby znaleźć odpowiednie dokumenty.

podsumowanie

w tym wpisie przedstawiliśmy istniejące sposoby obsługi synonimów w Elasticsearch. Począwszy od pojedynczych synonimów słów / tokenów, ten post wprowadził dlaczego i jak synonimy działają w wyszukiwarce opartej na Lucene ze szczególnym naciskiem na Elasticsearch.

przyszłe wpisy będą podsumować zalety i wady każdego rozwiązania, jednak istnieje już ważna wskazówka, jeśli używasz synonimów wielowątkowych, skup się na użyciu zapytań fraz.

artykuł kończy się szybką prezentacją synonimów wielowątkowych i sposobem ich konfiguracji.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.