synonyma v Elasticsearch (HowTo)

brzy poté, co začnete svou cestu do vyhledávání, ve skutečnosti je to naprosto nezávislé na konkrétním vyhledávači, budete čelit situaci, kdy musíte zvládnout slova, která mají stejný význam.

například pokud necháte své uživatele vyhledávat podle místa, někteří mohou odkazovat na Spojené království jako Spojené království nebo na Spojené Státy Americké jako USA, ale tato situace není omezena na umístění, věci jako PhD je často také označován jako doktorský titul nebo doktorát.

jako první krok byste měli zjistit, zda jste v situaci s jedním slovem synonyma nebo více slov, to rozhodně není nic irelevantní pro vyhledávací systémy založené na Lucene. Historicky Lucene zacházel s více slovními synonymy velmi špatně, v podstatě jste jim museli vytvořit čas indexování, s následným seznamem problémů. Pokud jste zvědaví, sledujte tuto sérii pro budoucí příspěvky.

pokud máte hladovou technickou mysl, jedná se o několik relevantních otázek a odkazů pro vás:

pro tento příspěvek se zaměříme na to, jak to vyřešit v Elasticsearch v době dotazu, v následném příspěvku budeme zpracovávat synonyma času indexování a jejich výhody a nevýhody.

synonyma jsou zpracovávána v Elasticsearch a Solr jako součást řetězce transformace dotazu/indexování. Pokud nejste obeznámeni s mapováním děr a analytickými částmi v Elasticsearch, doporučuji vám, abyste před pokračováním dohnali tyto části, protože se na ně budeme v této části intenzivně soustředit.

pro synonyma založená na jednom slově nebo tokenu použijeme v Elasticsearch synonym token filter. Prvním krokem by bylo rozšíření aktuálního analytického řetězce o synony_token_filter, vaše definice mapování by měla vypadat nějak:

Elasticsearch požadavek na nastavení nového indexu se synonymem filtru v řetězci analýzy.

z tohoto obrázku vidíme, že jsme definovali nový filtr s názvem jobs_synonym_filter typu synonymum a zahrnuli dvě definice synonymum. Poté, co jste definovali filtr, měli byste jej zahrnout do analyzátoru, to je to, co můžete vidět ve druhém nastavení předchozího obrázku.

od této chvíle můžeme použít dříve definovaný analyzátor pro zpracování textu, pamatujte, že stejně jako u jiných vstupů, indexů nebo dotazů, Elasticsearch použije vybraný řetězec k jeho rozbití v tokenech, filtrování a obohacení před kontrolou obráceného indexu.

Elasticsearch nám poskytuje standardní způsob, jak zkontrolovat, jak se analyzátory chovají, takže nejsme nuceni je používat při indexování nebo dotazování. Pokud chcete ověřit, jak se analyzátor chová, můžete použít koncový bod _analyze.

pokud se například snažíme zkontrolovat chování dříve definovaného analyzátoru, můžeme přemýšlet o několika věrohodných slovech, PhD a Cop, ve větě, kterou budou překládat jako:

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

na dalším obrázku vidíme příklad toho, jak tento běh uvnitř Elasticsearch, můžeme vidět, jak jsou generovány různé žetony, včetně typu. Typ bude synonymem, když byl jeden z tokenů vygenerován z tabulky synonymum.

kontrola nový vlastní analyzátor a jak to zvládnout různé tokeny

nicméně v tomto příkladu můžeme začít vidět jeden z problémů s jedním token synonyma, PhD mapy k lékaři, nicméně lékař nemusí vždy znamenat pouze PhD, může také znamenat lékař, nebo lékař.

můžeme uvažovat o manipulaci s těmito synonymy se stejnou strukturou, ale to nebude možné, protože řetězec analýzy vygeneruje jeden token pro každé slovo, takže úloha předchozího filtru synonymum nebude úspěšná. Zkontrolujte další obrázek,

jak je lékař zpracován s dříve definovaným synonymem filtr

můžete vidět, jak slovo lékař není správně zpracováno s definovanými synonymy. Existuje řešení pro toto, multi slovo synonymum filtr.

více slov synonyma

správné zacházení s tímto případem v rámci rodiny vyhledávačů založených na Lucene je docela těžké, možná se divíte, proč?, je to proto, že Lucene obecná strategie je rozbít text do jednotlivých žetonů.

existuje několik strategií k řešení této situace, například:

  • redukce více slovních synonym na kanonickou formu.
  • kombinujte související tokeny dohromady a odtud vytvářejte synonyma.
  • pomocí nově vytvořeného synonyma graf filtr.

nebudeme pokrývat v této položce první dva, zkontrolujte nadcházející příspěvky pro více informací o nich. V této položce se zaměříme na synonym graph filter, inteligentnější tokenový filtr v Lucene, který dokáže zpracovat nejen tokeny, ale celkový vztah mezi slovy.

Chcete-li použít filtr synonym graph, měli byste jej deklarovat podobným způsobem jako u filtru zavedeného v předchozí části, měl by vypadat jako další obrázek:

vytvořte nový filtr na základě synonym graph filter (synonyma definovaná přímo v požadavku)

v tomto příkladu jsme definovali tři synonyma přímo při vytváření analytického řetězce, nicméně je lepší nastavit seznam synonym pomocí konfiguračního souboru. Synonyma lze zadat pomocí formátu Solr/Lucene nebo WordNet.

pokud jste nikdy neslyšeli o WordNet, stojí za kontrolu!. WordNet je velká lexikální databáze angličtiny, podstatná jména, slovesa, přídavné jméno, příslovce jsou seskupeny do sady synonym a mnoho dalších. Tento druh lexikálních databází je velmi užitečný, když se snažíte vyvinout bohatší porozumění textu. Existují podobné pojmy pro jiné jazyky, jako je Němčina s GermaNet.

v následujících několika obrázcích můžete vidět, jak tato nová synonyma fungují,

kontrola lékaře s novým filtrem synonymum

kontrola systém Engineerwith nové synonymum filtr

podívejte se, jak Elasticsearch byl dost chytrý, aby zjistili, že jak pracovat na jednom jediném slovním synonymem, jako je lékař, ale také jak zacházet systémový inženýr.

ale jak říkají Španělé, “no es oro todo lo que relace” nebo v angličtině, ne všechno bude snadné. Existuje několik doporučení, které jdeme do Průzkumníka také v dalších položkách, ale v kostce, pokud používáte synonyma v Elasticsearch raději phrase_query přes query_string, můžete vidět na dalších obrázcích, jak fungují.

ladění dotazu pomocí fráze shody

ladění dotazu pomocí řetězce dotazu

můžete vidět, jak poslední obrázek, který používá query_string, negeneruje správné termíny dotazu k nalezení správných dokumentů.

Rekapitulace

v této položce jsme představili existující způsoby zpracování synonym v Elasticsearch. Počínaje synonyma jediného slova / tokenu tento příspěvek představil, proč a jak synonyma fungují ve vyhledávači založeném na Lucene se zvláštním zaměřením na Elasticsearch.

budoucí záznamy rekapitulují klady a zápory každého řešení, nicméně již existuje důležitý tip, Pokud používáte synonyma s více slovy, zaměřte se na používání frázových dotazů.

článek končí rychlou prezentací víceslovných synonym a jejich nastavením.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.