synoniemen in Elasticsearch (HowTo)

kort na het begin van uw zoektocht, Dit is eigenlijk volkomen onafhankelijk van een bepaalde zoekmachine, zult u te maken krijgen met woorden die dezelfde betekenis hebben.

bijvoorbeeld als u uw gebruikers laat zoeken op locatie, kunnen sommigen naar het Verenigd Koninkrijk verwijzen als UK, of naar de Verenigde Staten Van Amerika als USA, maar deze situatie is niet beperkt tot locatie, dingen zoals een PhD wordt vaak ook aangeduid als doctoraat of doctoraat.

als eerste stap moet u bepalen of u in een situatie met één woord synoniemen of meerdere woord, Dit is zeker niet irrelevant voor Lucene gebaseerde zoeksystemen. Historisch gezien heeft Lucene meerdere woordsynoniemen zeer slecht behandeld, in principe moest je ze een indexeringstijd bouwen, met de daaropvolgende lijst met problemen. Als je nieuwsgierig bent, volg deze serie voor toekomstige berichten.

als u een hongerige technische geest, dit zijn de verschillende relevante kwesties en links voor u:

voor dit bericht, gaan we ons richten op hoe dit op te lossen in Elasticsearch op query tijd, in follow up post gaan we indexering tijd synoniemen en hun voors en tegens behandelen.

Synoniemen worden behandeld in Elasticsearch, en Solr, als onderdeel van de query/indexering transformatie keten. Als je niet bekend bent met de hole mappings en analyse-onderdelen in Elasticsearch, raad ik je aan dat je voordat je verder gaat, deze onderdelen inhaalt, omdat we in dit deel zwaar op ze gaan focussen.

voor het geval van een enkel woord, of op token gebaseerde Synoniemen, zullen we in Elasticsearch het synonym token filter gebruiken. Eerste stap zou zijn om uw huidige analyseketen uit te breiden met een synonym_token_filter, uw mapping definitie moet er ongeveer uitzien als:

Elasticsearch verzoek om een nieuwe index op te zetten met een synoniem filter in de analyseketen.

we kunnen aan deze afbeelding zien dat we een nieuw filter hebben gedefinieerd, genaamd jobs_synonym_filter, van het type synoniem en twee synonymdefinities bevatten. Nadat je het filter hebt gedefinieerd, moet je het opnemen in een analyzer, dit is wat je kunt zien in de tweede setup van de vorige afbeelding.

vanaf nu kunnen we de eerder gedefinieerde analyzer gebruiken om tekst te verwerken, onthoud dat Elasticsearch, net als bij elke andere invoer -, index-of query-tijd, de geselecteerde keten zal gebruiken om deze in tokens te breken, te filteren en te verrijken voordat we de omgekeerde index controleren.

Elasticsearch geeft ons een standaard manier om te controleren hoe de analyzers zich gedragen, zodat we niet gedwongen zijn om ze te controleren tijdens het indexeren of opvragen. Als u wilt controleren hoe een analyzer zich gedraagt, kunt u het _eindpunt analyseren gebruiken.

als we bijvoorbeeld het gedrag van de eerder gedefinieerde analyzer willen controleren, kunnen we denken aan een paar plausibele woorden, PhD en Cop, in een zin die ze vertalen als:

  • PhD John Doe → Doctor John Doe
  • Cop John Doe → Politie John Doe

In de volgende afbeelding zien we een voorbeeld van hoe dit in Elasticsearch wordt uitgevoerd, We kunnen zien hoe de verschillende tokens worden gegenereerd, inclusief het type. Het type wordt synoniem wanneer een van de tokens is gegenereerd uit de tabel van het synoniem.

controle van de nieuwe aangepaste analysator en hoe het omgaan met de verschillende tokens

maar in dit voorbeeld kunnen we beginnen met het zien van een van de problemen met enkele token Synoniemen, PhD kaarten naar een arts, echter arts betekent niet altijd alleen PhD, kan ook betekenen arts, of Arts.

we zouden kunnen overwegen om deze Synoniemen met dezelfde structuur te behandelen, maar dit zal niet mogelijk zijn omdat de analyseketen voor elk woord één token zal genereren, waardoor de taak van het vorige synonym-filter niet succesvol is. Controleer de volgende afbeelding,

hoe medisch arts wordt verwerkt met het eerder gedefinieerde synonym filter

u kunt zien hoe het woord arts niet correct wordt verwerkt met de gedefinieerde Synoniemen. Hier is een oplossing voor, het multi woord synoniem filter.

Synoniemen van meerdere woorden

het goed behandelen van deze zaak onder de Lucene-gebaseerde zoekmachines familie is nogal moeilijk, je vraagt je misschien af waarom?, dit komt omdat Lucene algemene strategie is om tekst te breken in enkele tokens.

er zijn enkele strategieën om deze situatie op te lossen, bijvoorbeeld:

  • Synoniemen van meerdere woorden reduceren tot een canonieke vorm.
  • combineer verwante tokens samen, en bouw de Synoniemen vanaf daar.
  • met behulp van het nieuw aangemaakte synonym graph-filter.

we zullen niet dekken in dit item de eerste twee, check komende berichten voor meer informatie over hen. In dit item zullen we ons richten op de synoniem grafiek filter, een meer slimme token filter in Lucene in staat om niet alleen tokens te verwerken, maar de algehele relatie tussen woorden.

om het synonym graph filter te gebruiken moet u het op dezelfde manier verklaren als bij het filter dat in de vorige sectie is geïntroduceerd, het moet eruit zien als de volgende afbeelding:

Bouw een nieuw filter op basis van het synonym graph filter (Synoniemen direct gedefinieerd in de aanvraag)

In dit voorbeeld definieerden we drie Synoniemen direct in de creatie van de analyseketen, maar het is beter om de lijst met synoniemen in te stellen met behulp van een configuratiebestand. Synoniemen kunnen worden ingevoerd met behulp van de Solr / Lucene of het WordNet formaat.

Als u nog nooit gehoord van WordNet, de moeite waard om te controleren!. WordNet is een grote lexicale database van het Engels, zelfstandige naamwoorden, werkwoorden, bijvoeglijk naamwoord, bijwoorden zijn gegroepeerd in een set van synoniemen, en nog veel meer. Dit soort lexicale databases zijn erg handig als je probeert een rijker begrip van tekst te ontwikkelen. Er zijn vergelijkbare concepten voor andere talen, zoals Duits met GermaNet.

In de volgende paar beelden kon je zien hoe deze nieuwe synoniemen werken,

het Controleren van de Arts met de nieuwe synoniem filter

Controle Systeem Engineerwith de nieuwe synoniem filter

zie hoe Elasticsearch was slim genoeg om erachter te komen hoe te werken op één enkel woord synoniem zoals Arts, maar ook hoe te handelen als system engineer.

maar zoals de Spanjaarden zeggen, “no es oro todo lo que reluce” of in het Engels, zal niet alles gemakkelijk zijn. Er zijn een paar aanbevelingen die we gaan explorer ook in verdere vermeldingen, echter in een notendop, als u gebruik maakt van synoniemen in Elasticsearch liever een phrase_query dan een query_string, kunt u in de volgende afbeeldingen zien hoe ze werken.

foutopsporing opvragen met een overeenkomende zin

Query debugging met een query string

u kunt zien hoe de laatste afbeelding, die de query_string Gebruikt, geen juiste querytermen genereert om de juiste documenten te vinden.

samenvatting

In dit item hebben we de bestaande manieren gepresenteerd om synoniemen in Elasticsearch te verwerken. Beginnend met de enkele woord/token Synoniemen, introduceerde dit bericht waarom en hoe de Synoniemen werken in een Lucene gebaseerde zoekmachine met speciale focus op Elasticsearch.

toekomstige items zullen de voors en tegens van elke oplossing samenvatten, maar er is al een belangrijke tip, Als u Synoniemen van meerdere woorden gebruikt, focus dan op het gebruik van zoektermen.

het artikel eindigt met een snelle presentatie van synoniemen met meerdere woorden en hoe ze kunnen worden ingesteld.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.