Synonymer I Elasticsearch (HowTo)

Kort tid etter at du starter din reise i søk, faktisk er dette helt uavhengig av en bestemt søkemotor, vil du møte en situasjon der du må håndtere ord som har samme betydning.

for eksempel hvis du lar brukerne søke etter sted, kan Noen referere Til Storbritannia SOM STORBRITANNIA, Eller Til Usa som USA, men denne situasjonen er ikke begrenset til sted, ting Som En PhD er ofte også referert til som doktorgrad eller doktorgrad.

som et første skritt bør du avgjøre om du er i en situasjon med ett ordsynonymer eller flere ord, dette er definitivt ikke noe irrelevant for Lucene-baserte søkesystemer. Historisk Har Lucene håndtert flere ordsynonymer veldig dårlig, i utgangspunktet måtte du bygge dem en indekseringstid, med den påfølgende listen over problemer. Hvis du er nysgjerrig, følg denne serien for fremtidige innlegg.

hvis du har et sulten teknisk sinn, er dette flere relevante problemer og lenker for deg:

for dette innlegget skal vi fokusere på hvordan du løser dette I Elasticsearch på query time, i oppfølgingspost skal vi håndtere indekseringstidssynonymer og deres fordeler og ulemper.

Synonymer håndteres I Elasticsearch, Og Solr, som en del av spørringen / indeksering transformasjon kjeden. Hvis du ikke er kjent med hull mappings og analyse deler I Elasticsearch, jeg anbefaler deg at før du går videre, du fange opp på disse delene, som vi kommer til å være tung fokus i denne delen på dem.

for tilfelle av enkelt ord, eller token baserte synonymer, vil vi bruke I Elasticsearch synonym token filter. Første skritt vil være å utvide din nåværende analysekjede med et synonym_token_filter, din kartleggingsdefinisjon skal se ut som noe:

Elasticsearch forespørsel om å sette opp en ny indeks med et synonym filter i analysekjeden.

vi kan se fra dette bildet at vi definerte et nytt filter, kalt jobs_synonym_filter, av typen synonym og inkluderer to synonym definisjoner. Etter at du har definert filteret, bør du inkludere det i en analysator, dette er hva du kan se i det andre oppsettet av forrige bilde.

Fra nå av kan vi bruke den tidligere definerte analysatoren til å behandle tekst, husk Som med annen inngang, indeks eller spørringstid, Vil Elasticsearch bruke den valgte kjeden for å bryte den i tokens, filtrere og berike den før du sjekker den inverterte indeksen.

Elasticsearch gir oss en standard måte å sjekke hvordan analysatorene oppfører seg, så vi er ikke tvunget til å bruke sjekk dem mens indeksering eller spørring. Hvis du vil kontrollere hvordan en analysator oppfører seg, kan du bruke _analyze-endepunktet.

for eksempel hvis vi tar sikte på å sjekke oppførselen til den tidligere definerte analysatoren, kan vi tenke på noen troverdige ord, PhD og Cop, i en setning vil de oversette som:

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

i det neste bildet ser vi et eksempel på hvordan dette kjører inne Elasticsearch, vi kan se hvordan de forskjellige tokens genereres, inkludert typen. Typen vil være synonym når en av tokens er generert fra synonymets tabell.

Kontrollerer den nye tilpassede analysatoren og hvordan den håndterer de forskjellige tokens

Men I dette eksemplet kan Vi begynne å se et av problemene med enkelt token-synonymer, PhD-kart til en lege, men legen betyr ikke alltid Bare PhD, kan også bety lege eller Lege.

Vi kan tenke på å håndtere disse synonymer med samme struktur, men dette kommer ikke til å være mulig fordi analysekjeden vil generere ett token for hvert ord, noe som gjør oppgaven til det forrige synonymfilteret ikke vellykket. Sjekk neste bilde,

Hvordan lege er prosess med det tidligere definerte synonymfilteret

du kan se hvordan ordet lege ikke er riktig prosess med de definerte synonymer. Det er en løsning for dette, multi word synonym filter.

Flere ordsynonymer

Riktig håndtering av denne saken under Lucene – baserte søkemotorer er ganske vanskelig, du lurer kanskje på hvorfor?, Dette er fordi Lucene generell strategi er å bryte tekst i enkelt tokens.

det er noen strategier for å løse denne situasjonen, for eksempel:

  • Redusere multi ord synonymer til en kanonisk form.
  • Kombiner relaterte tokens sammen, og bygg synonymer derfra.
  • Bruke det nyopprettede synonymgraffilteret.

vi vil ikke dekke i denne oppføringen de to første, sjekk kommende innlegg for mer informasjon om dem. I denne oppføringen vil vi fokusere på synonym graph filter, et mer smart token filter I Lucene i stand til å håndtere ikke bare tokens, men det generelle forholdet mellom ord.

for å bruke synonymgraffilteret bør du deklarere det på samme måte som med filteret introdusert i forrige avsnitt, det skal se ut som det neste bildet:

Bygg et nytt filter basert på synonymgraffilteret (synonymer definert direkte i forespørselen)

i dette eksemplet definerte vi tre synonymer direkte i etableringen av analysekjeden, men det er bedre å sette opp listen over synonymer ved hjelp av en konfigurasjonsfil. Synonymer kan legges inn Ved Hjelp Av Solr / Lucene eller WordNet format.

hvis Du aldri har hørt Om WordNet, verdt å sjekke!. WordNet er en stor leksikalsk database med engelsk, substantiver, verb, adjektiv, adverb er gruppert i et sett med synonymer, og mange flere. Denne typen leksikalske databaser er svært nyttige når du prøver å utvikle en rikere forståelse av tekst. Det finnes lignende begreper for andre språk som tysk Med GermaNet.

i de neste bildene kan du se hvordan disse nye synonymer fungerer,

Kontrollerer Lege med det nye synonymfilteret

Kontroller Systemingeniørmed det nye synonymfilteret

se hvordan Elasticsearch var smart nok til å finne ut hvordan man opererer på ett enkelt ordsynonym som Lege, men også hvordan man håndterer systemingeniør.

men som spanske folk sier, “no es oro todo lo que reluce” eller på engelsk, ikke alt kommer til å bli lett. Det er noen anbefalinger vi skal explorer også i ytterligere oppføringer, men i et nøtteskall, hvis du bruker synonymer I Elasticsearch foretrekker en phrase_query over en query_string, kan du se i de neste bildene hvordan de fungerer.

Spørring feilsøking med en samsvarsfrase

Feilsøking Av Spørring med en spørrestreng

du kan se hvordan det siste bildet, det som bruker query_string, ikke genererer riktige spørringsvilkår for å finne de riktige dokumentene.

Oppsummering

i dette innlegget har vi presentert de eksisterende måtene å håndtere synonymer I Elasticsearch. Fra og med de enkle ord / token-synonymer, introduserte dette innlegget hvorfor og hvordan synonymer fungerer i En Lucene – basert søkemotor med spesielt fokus på Elasticsearch.

Fremtidige oppføringer vil oppsummering på fordeler og ulemper ved hver løsning, men det er allerede et viktig tips, hvis du bruker multiword synonymer, fokusere på å bruke setningsspørringer.

artikkelen avsluttes med en rask presentasjon av multiword synonymer og hvordan de kan settes opp.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.