Sinonimi in Elasticsearch (HowTo)

Subito dopo aver iniziato il tuo viaggio nella ricerca, in realtà questo è perfettamente indipendente da un particolare motore di ricerca, dovrai affrontare una situazione in cui devi gestire parole che hanno lo stesso significato.

Ad esempio, se si consente agli utenti di cercare per posizione, alcuni potrebbero fare riferimento al Regno Unito come Regno Unito, o agli Stati Uniti d’America come Stati Uniti, ma questa situazione non è limitata alla posizione, cose come un dottorato di ricerca è spesso indicato anche come dottorato o dottorato.

Come primo passo dovresti determinare se ti trovi in una situazione con sinonimi di una parola o più parole, questo non è assolutamente irrilevante per i sistemi di ricerca basati su Lucene. Storicamente Lucene ha gestito molto male i sinonimi di più parole, in pratica si doveva costruire loro un tempo di indicizzazione, con il successivo elenco di problemi. Se sei curioso, segui questa serie per i post futuri.

Se hai una mente tecnica affamata, questi sono i diversi problemi e link rilevanti per te:

Per questo post, ci concentreremo su come risolvere questo problema in Elasticsearch al momento della query, nel post di follow-up gestiremo i sinonimi del tempo di indicizzazione e i loro pro e contro.

I sinonimi vengono gestiti in Elasticsearch e Solr, come parte della catena di trasformazione query/indicizzazione. Se non si ha familiarità con le mappature dei fori e le parti di analisi in Elasticsearch, vi consiglio che prima di andare avanti, si raggiunge su queste parti, come ci accingiamo ad essere messa a fuoco pesante in questa parte su di loro.

Per il caso di una singola parola o di sinonimi basati su token, utilizzeremo in Elasticsearch il filtro token sinonimo. Il primo passo sarebbe estendere la catena di analisi corrente con un synonym_token_filter, la definizione di mappatura dovrebbe essere simile a:

Elasticsearch richiede di impostare un nuovo indice con un filtro sinonimo nella catena di analisi.

possiamo vedere da questa immagine che abbiamo definito un nuovo filtro, chiamato jobs_synonym_filter, di tipo sinonimo e includere due definizioni di sinonimo. Dopo aver definito il filtro, dovresti includerlo all’interno di un analizzatore, questo è ciò che puoi vedere nella seconda configurazione dell’immagine precedente.

D’ora in poi, possiamo usare l’analizzatore definito in precedenza per elaborare il testo, ricorda come con qualsiasi altro input, indice o tempo di query, Elasticsearch utilizzerà la catena selezionata per romperla in token, filtrarla e arricchirla prima di controllare l’indice invertito.

Elasticsearch ci fornisce un modo standard per verificare come si comportano gli analizzatori, quindi non siamo costretti a controllarli durante l’indicizzazione o l’interrogazione. Se si desidera verificare il comportamento di un analizzatore, è possibile utilizzare l’endpoint _analyze.

Per esempio, se abbiamo l’obiettivo di verificare il comportamento precedentemente definiti analyzer, potremmo pensare a un paio di plausibile parole, Dottorato di ricerca e Cop, in una frase si tradurrà in:

  • Dottorato di ricerca John Doe → Medico John Doe
  • Poliziotto John Doe → Polizia John Doe

Nell’immagine seguente vediamo un esempio di come eseguire all’interno di Elasticsearch, possiamo vedere come i diversi token generati, tra cui il tipo. Il tipo sarà sinonimo quando uno dei token è stato generato dalla tabella del sinonimo.

Verifica il nuovo custom analizzatore e come gestire i diversi token

Tuttavia in questo esempio si può iniziare a vedere uno dei problemi del singolo token sinonimi, PhD mappe di un medico, tuttavia medico non sempre solo significare Dottorato di ricerca, può anche significare medico, o il Medico.

Potremmo pensare di gestire questi sinonimi con la stessa struttura, tuttavia ciò non sarà possibile perché la catena di analisi genererà un token per ogni parola, rendendo il compito del filtro sinonimo precedente non riuscito. Controllare l’immagine successiva,

Come medico è il processo con il precedentemente definito sinonimo filtro

si può vedere come la parola di medico non è corretto processo con il sinonimi definito. C’è una soluzione per questo, il filtro sinonimo di più parole.

Sinonimi di parole multiple

Gestire correttamente questo caso sotto la famiglia di motori di ricerca basati su Lucene è un po ‘ difficile, ci si potrebbe chiedere perché?, questo perché la strategia generale di Lucene è di rompere il testo in singoli token.

Esistono alcune strategie per risolvere questa situazione, ad esempio:

  • Ridurre i sinonimi di più parole in una forma canonica.
  • Combina insieme i token correlati e crea i sinonimi da lì.
  • Utilizzando il filtro grafico sinonimo appena creato.

non copriremo in questa voce i primi due, controllare i prossimi post per maggiori dettagli su di loro. In questa voce ci concentreremo sul filtro grafico sinonimo, un filtro token più intelligente in Lucene in grado di gestire non solo i token, ma la relazione generale tra le parole.

Per utilizzare il filtro grafico sinonimo dovresti dichiararlo in modo simile al filtro introdotto nella sezione precedente, dovrebbe assomigliare a qualcosa di simile all’immagine successiva:

Creare un nuovo filtro basato su un sinonimo grafico filtro (sinonimi definiti direttamente nella richiesta)

In questo esempio abbiamo definito tre sinonimi direttamente nella creazione dell’analisi della catena, tuttavia è meglio impostare l’elenco dei sinonimi utilizzando un file di configurazione. I sinonimi possono essere inseriti utilizzando il formato Solr / Lucene o WordNet.

Se non hai mai sentito parlare di WordNet, vale la pena controllare!. WordNet è un ampio database lessicale di inglese, nomi, verbi, aggettivi, avverbi sono raggruppati in una serie di sinonimi, e molti altri. Questo tipo di database lessicali sono molto utili quando si sta tentando di sviluppare una comprensione più ricca del testo. Ci sono concetti simili per altre lingue come il tedesco con GermaNet.

Nel prossimo paio di immagini si può vedere come questo nuovo sinonimi di lavoro,

Controllo Medico con il nuovo sinonimo di filtro

Sistema di Controllo Engineerwith il nuovo sinonimo di filtro

vedere come Elasticsearch era abbastanza intelligente per capire che il modo di operare su una singola parola sinonimo come Medico, ma anche come gestire il sistema di ingegnere.

Ma come dicono gli spagnoli, “no es oro todo lo que reluce” o in inglese, non tutto sarà facile. Ci sono alcuni consigli che andremo a esplorare anche in ulteriori voci, tuttavia in poche parole, se stai usando sinonimi in Elasticsearch preferisci un phrase_query su un query_string, puoi vedere nelle prossime immagini come funzionano.

Query di debug con una frase intera

Query di debug con una stringa di query

si può vedere come l’ultima immagine, quella che utilizza le query_string, non genera corretta termini di query per trovare i documenti relativi.

Recap

In questa voce abbiamo presentato i modi esistenti per gestire i sinonimi in Elasticsearch. A partire dai singoli sinonimi di parola / token, questo post ha introdotto perché e come funzionano i sinonimi in un motore di ricerca basato su Lucene con particolare attenzione a Elasticsearch.

Le voci future ricapitoleranno i pro ei contro di ogni soluzione, tuttavia c’è già un suggerimento importante, se si utilizzano sinonimi multiword, concentrarsi sull’utilizzo di query di frasi.

L’articolo termina con una rapida presentazione dei sinonimi multiword e di come possono essere impostati.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.