Elasticsearch Γ¨ un motore di ricerca con json rest api, che utilizza Lucene e scritto in Java. Una descrizione di tutti i vantaggi di questo motore Γ¨ disponibile su il sito ufficiale. Nel seguito faremo riferimento ad Elasticsearch come ES.
Motori simili vengono utilizzati per ricerche complesse in un database di documenti. Ad esempio, la ricerca tenendo conto della morfologia della lingua o la ricerca per coordinate geografiche.
In questo articolo parlerΓ² delle basi di ES utilizzando l'esempio dell'indicizzazione dei post del blog. Ti mostrerΓ² come filtrare, ordinare e cercare documenti.
Per non dipendere dal sistema operativo, farΓ² tutte le richieste a ES utilizzando CURL. Esiste anche un plugin per Google Chrome chiamato senso.
Il testo contiene collegamenti a documentazione e altre fonti. Alla fine sono presenti i link per un rapido accesso alla documentazione. Le definizioni dei termini non familiari si trovano in Π»ΠΎΡΡΠ°ΡΠΈΠΈ.
Installazione dell'ES
Per fare ciΓ², abbiamo prima bisogno di Java. Sviluppatori Raccomandare installare le versioni Java piΓΉ recenti di Java 8 aggiornamento 20 o Java 7 aggiornamento 55.
ES creato automaticamente indice blog e ΡΠΈΠΏ inviare. Possiamo tracciare un'analogia condizionale: un indice Γ¨ un database e un tipo Γ¨ una tabella in questo database. Ogni tipo ha il proprio schema β mappatura, proprio come una tabella relazionale. La mappatura viene generata automaticamente quando il documento viene indicizzato:
# ΠΠΎΠ»ΡΡΠΈΠΌ mapping Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/_mapping?pretty"
Nella risposta del server ho aggiunto nei commenti i valori dei campi del documento indicizzato:
Vale la pena notare che ES non distingue tra un singolo valore e un array di valori. Ad esempio, il campo title contiene semplicemente un titolo e il campo tags contiene un array di stringhe, sebbene siano rappresentate allo stesso modo nella mappatura.
Parleremo piΓΉ approfonditamente della mappatura in seguito.
richieste
Recupero di un documento tramite il suo ID:
# ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ id 1 ΡΠΈΠΏΠ° post ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/post/1?pretty"
Abbiamo scelto l'ultimo post. size limita il numero di documenti da rilasciare. total mostra il numero totale di documenti corrispondenti alla richiesta. sort nell'output contiene un array di numeri interi in base al quale viene eseguito l'ordinamento. Quelli. la data Γ¨ stata convertita in un numero intero. Maggiori informazioni sull'ordinamento possono essere trovate in documentazione.
Filtri e query
ES a partire dalla versione 2 non distingue invece tra filtri e query viene introdotto il concetto di contesto.
Un contesto di query differisce da un contesto di filtro in quanto la query genera un _score e non viene memorizzata nella cache. Ti mostrerΓ² cos'Γ¨ _score piΓΉ tardi.
Filtra per data
Usiamo la richiesta gamma nel contesto del filtro:
Campo _score spettacoli pertinenza. Se la richiesta viene eseguita in un contesto di filtro, il valore _score sarΓ sempre uguale a 1, il che significa una corrispondenza completa con il filtro.
Gli analizzatori
Gli analizzatori sono necessari per convertire il testo sorgente in un insieme di token.
Gli analizzatori sono costituiti da uno Gettoniera e diversi facoltativi Filtri token. Tokenizer puΓ² essere preceduto da diversi CharFilter. I tokenizzatori suddividono la stringa di origine in token, ad esempio spazi e caratteri di punteggiatura. TokenFilter puΓ² modificare token, eliminarne o aggiungerne di nuovi, ad esempio lasciare solo la radice della parola, rimuovere preposizioni, aggiungere sinonimi. CharFilter: modifica l'intera stringa sorgente, ad esempio, elimina i tag html.
L'analizzatore standard ha diviso la stringa per spazi e ha convertito tutto in minuscolo, l'analizzatore russo ha rimosso le parole non importanti, le ha convertite in minuscolo e ha lasciato la radice delle parole.
Vediamo quali Tokenizer, TokenFilters, CharFilters utilizza l'analizzatore russo:
Innanzitutto, tutti i tag HTML verranno rimossi dalla stringa sorgente, quindi lo standard tokenizzatore la dividerΓ in token, i token risultanti verranno spostati in minuscolo, le parole insignificanti verranno rimosse e i token rimanenti rimarranno la radice della parola.
La richiesta puΓ² contenere caratteri speciali, ad esempio:
""fried eggs" +(eggplant | potato) -frittata"
Richiedi sintassi:
+ signifies AND operation
| signifies OR operation
- negates a single token
" wraps a number of tokens to signify a phrase for searching
* at the end of a term signifies a prefix query
( and ) signify precedence
~N after a word signifies edit distance (fuzziness)
~N after a phrase signifies slop amount
Se sei interessato ad articoli-lezioni simili, hai idee per nuovi articoli o hai proposte di cooperazione, allora sarΓ² felice di ricevere un messaggio in un messaggio personale o via e-mail [email protected].