sinonime în Elasticsearch (HowTo)

la scurt timp după ce începe călătoria în căutare, de fapt, acest lucru este perfect independent de un anumit motor de căutare, vă va confrunta cu o situație în care trebuie să se ocupe de cuvinte care are același sens.

de exemplu, dacă permiteți utilizatorilor să caute după locație, unii s-ar putea referi la Regatul Unit ca Marea Britanie sau la Statele Unite ale Americii ca SUA, dar această situație nu se limitează la locație, lucruri precum un doctorat este adesea denumit și doctorat sau doctorat.

ca un prim pas ar trebui să determine dacă sunteți într-o situație cu un singur cuvânt sinonime sau multi cuvânt, acest lucru este cu siguranta nimic irelevant pentru sistemele de căutare bazate pe Lucene. Punct de vedere istoric Lucene a manipulat sinonime multi cuvânt foarte rău, practic a trebuit să le construiască un timp de indexare, cu lista ulterioară a problemelor. Dacă sunteți curioși, urmați această serie pentru postările viitoare.

dacă au o minte tehnică foame, acest lucru sunt mai multe probleme relevante și link-uri pentru tine:

pentru acest post, ne vom concentra asupra modului de a rezolva acest lucru în Elasticsearch la momentul interogării, în follow up post vom gestiona sinonimele timpului de indexare și argumentele pro și contra.

sinonimele sunt tratate în Elasticsearch și Solr, ca parte a lanțului de transformare a interogării/indexării. Dacă nu sunteți familiarizați cu mapările de găuri și părțile de analiză din Elasticsearch, vă recomand ca, înainte de a merge mai departe, să vă prindeți pe aceste părți, deoarece vom fi concentrați în această parte asupra lor.

pentru cazul sinonimelor bazate pe un singur cuvânt sau token, vom folosi în Elasticsearch filtrul sinonim token. Primul pas ar fi extinderea lanțului de analiză curent cu un synonym_token_filter, definiția dvs. de cartografiere ar trebui să arate ceva de genul:

cerere Elasticsearch pentru a seta un nou index cu un filtru sinonim în lanțul de analiză.

putem vedea din această imagine că am definit un nou filtru, numit jobs_synonym_filter, de tip sinonim și includ două definiții sinonime. După ce ați definit filtrul, ar trebui să îl includeți în interiorul unui analizor, aceasta este ceea ce puteți vedea în a doua configurare a imaginii anterioare.

de acum înainte, putem folosi analizorul definit anterior pentru a procesa textul, amintiți-vă ca în orice altă intrare, index sau timp de interogare, Elasticsearch va folosi lanțul selectat pentru a-l rupe în jetoane, a-l filtra și a-l îmbogăți înainte de a verifica indexul inversat.

Elasticsearch ne oferă o modalitate standard de a verifica modul în care se comportă analizoarele, deci nu suntem obligați să le folosim în timp ce le indexăm sau interogăm. Dacă doriți să verificați cum se comportă un analizor, puteți utiliza punctul final _analyze.

de exemplu, dacă ne propunem să verificăm comportamentul analizorului definit anterior, ne-am putea gândi la câteva cuvinte plauzibile, doctorat și Cop, într-o propoziție pe care o vor traduce ca:

  • Dr.John Doe Doctor John Doe
  • polițist John Doe poliție John Doe

în imaginea următoare vom vedea un exemplu de modul în care această rula în interiorul Elasticsearch, putem vedea modul în care sunt generate diferite jetoane, inclusiv tipul. Tipul va fi sinonim atunci când unul dintre jetoane a fost generat din tabelul sinonimului.

verificarea noul Analizor personalizat și modul în care se ocupe de diferite jetoane

cu toate acestea, în acest exemplu, putem începe să vedem una dintre problemele cu sinonime singur jeton, hărți de doctorat la un medic, cu toate acestea medicul nu înseamnă întotdeauna doar de doctorat, poate însemna, de asemenea, medic, sau medic.

ne-am putea gândi la manipularea acestor sinonime cu aceeași structură, totuși acest lucru nu va fi posibil, deoarece lanțul de analiză va genera un jeton pentru fiecare cuvânt, făcând sarcina filtrului sinonim anterior să nu aibă succes. Verificați următoarea imagine,

cum se procesează medicul cu filtrul sinonim definit anterior

puteți vedea cum cuvântul medic nu este procesat corect cu sinonimele definite. Există o soluție pentru acest lucru, filtrul sinonim cu mai multe cuvinte.

sinonime multi word

manipularea corectă a acestui caz în familia motoarelor de căutare bazate pe Lucene este cam greu, s-ar putea să vă întrebați de ce?, acest lucru se datorează faptului că strategia generală Lucene este de a sparge textul în jetoane unice.

există câteva strategii pentru a rezolva această situație, de exemplu:

  • reducerea sinonimelor cu mai multe cuvinte la o formă canonică.
  • combina token-uri legate împreună, și de a construi sinonime de acolo.
  • folosind filtrul grafic sinonim nou creat.

nu vom acoperi în această intrare primele două, verificați postările viitoare pentru mai multe detalii despre ele. În această intrare ne vom concentra pe filtrul grafic sinonim, un filtru token mai inteligent în Lucene capabil să se ocupe nu doar jetoane, dar relația generală dintre cuvinte.

pentru a utiliza filtrul grafic sinonim, ar trebui să îl declarați într-un mod similar cu filtrul introdus în secțiunea anterioară, ar trebui să arate la ceva asemănător imaginii următoare:

construiți un filtru nou bazat pe filtrul grafic sinonim (sinonime definite direct în cerere)

în acest exemplu am definit trei sinonime direct în crearea lanțului de analiză, cu toate acestea este mai bine pentru a seta lista de sinonime folosind un fișier de configurare. Sinonimele pot fi introduse folosind formatul Solr/Lucene sau WordNet.

dacă nu ați auzit niciodată de WordNet, merită verificat!. WordNet este o bază de date lexicală mare de limba engleză, substantive, verbe, adjective, adverbe sunt grupate într-un set de sinonime, și multe altele. Acest tip de baze de date lexicale sunt foarte utile atunci când încercați să Dezvoltator o înțelegere mai bogată a textului. Există concepte similare pentru alte limbi, cum ar fi germana cu GermaNet.

în următoarele două imagini puteți vedea cum funcționează aceste noi sinonime,

verificarea medicului cu noul filtru sinonim

verificarea Engineer System cu noul filtru sinonim

vezi cum Elasticsearch a fost suficient de inteligent pentru a da seama că modul de a opera pe un singur cuvânt sinonim, cum ar fi medic, dar, de asemenea, cum să se ocupe de inginer de sistem.

dar, așa cum spun spaniolii, “no es oro todo lo que reluce” sau în engleză, nu totul va fi ușor. Există câteva recomandări pe care le vom explora și în alte intrări, cu toate acestea, pe scurt, dacă utilizați sinonime în Elasticsearch preferați un phrase_query peste un query_string, puteți vedea în imaginile următoare cum funcționează.

depanare interogare cu o frază de potrivire

depanare interogare cu un șir de interogare

puteți vedea cum ultima imagine, cea care utilizează query_string, nu generează Termeni de interogare adecvați pentru a găsi documentele corespunzătoare.

recapitulare

în această intrare am prezentat modalitățile existente de a gestiona sinonime în Elasticsearch. Începând cu sinonimele cu un singur cuvânt / jeton, acest post a introdus de ce și cum funcționează sinonimele într-un motor de căutare bazat pe Lucene, cu accent special pe Elasticsearch.

intrările viitoare vor recapitula avantajele și dezavantajele fiecărei soluții, cu toate acestea există deja un sfat important, dacă utilizați sinonime multiword, concentrați-vă pe utilizarea interogărilor de Expresie.

articolul se încheie cu o prezentare rapidă a sinonimelor multiword și modul în care acestea pot fi configurate.

Lasă un răspuns

Adresa ta de email nu va fi publicată.