2016-05-30 7 views
1

Ich benutze nur kibana, um ElasticSearch zu suchen, und ich habe mehrere Felder, die nur ein paar Werte annehmen können (Worst-Case, Servername, 30 verschiedene Werte).analysiert oder not_analyzed, was zu wählen

Ich verstehe, was Analyse zu größeren, komplexeren Feldern like this tun, aber die kleinen und einfachen Ich verstehe nicht den Vormarsch/Nachteil der analysierten/nicht analysierten Felder.

Was sind die Vorteile der Verwendung von analysierten und not_analyzed für ein "begrenzte Menge von Werten" Feld (Beispiel. Servername: Server [0-9] *, keine Sonderzeichen zu brechen)? Welche Art von Sucharten werde ich in Kibana verlieren? Bekomme ich Suchgeschwindigkeit oder Speicherplatz?

Testen auf einem der dann sah ich, dass die .RAW-Version des Feldes jetzt leer ist, aber Kibana kennzeichnet immer noch das Feld als analysiert, so finde ich meine Tests nicht schlüssig.

Antwort

11

Ich werde versuchen, es einfach zu halten, wenn Sie mehr Klarheit brauchen, lassen Sie es mich wissen, und ich werde eine bessere Antwort erarbeiten.

Das Feld "analysis" erstellt ein Token mit dem Analysator, den Sie für diese Tabelle in Ihrem Mapping definiert haben. Wenn Sie den Standard-Analyzer verwenden (wie Sie etwas ohne besondere Zeichen beziehen sagen wir Server [1-9]) mit dem Standard-Analysator (Alnum-Kleinbuchstaben Wort-Braker (das ist nicht der Name nur, was es im Grunde tut)) gehen tokenize:

this -> HelloWorld123 
into -> token1:helloworld123 

OR 

this -> Hello World 123 
into -> token1:hello && token2:world && token3:123 

in diesem Fall, wenn Sie eine Suche: Guter Tag wird es, -> „Hallo“ und es wird dieses Dokument überein, da das Token „Hallo“ ist.

im Fall von not_analized Felder, die es überhaupt tokenizer anwenden tut, ist Ihr Token Ihr Keyword so dass gesagt wird:

this -> Hello World 123 
into -> token1:(Hello World 123) 

, wenn Sie das Feld für „Hallo Welt 123“

suchen wird nicht übereinstimmen, weil "case sensitive" (Sie können immer noch Platzhalter verwenden, obwohl (Hallo *), können Sie das zu einem anderen Zeitpunkt ansprechen).

auf den Punkt:

use „analysiert“ Felder für die Felder, die Sie durchsuchen wollen, und Sie wollen Elasticsearch sie punkten. Beispiel: Titel, die das Wort "Jobs" enthalten. Abfrage: "Titel: Jobs".

doc1 : title:developer jobs in montreal 
doc2 : title:java coder jobs in vancuver 
doc3 : title:unix designer jobs in toronto 
doc4 : title:database manager vacancies in montreal 

dies wird title1 title2 title3 abrufen.

in diesem Fall "analysierte" Felder ist was Sie wollen.

Wenn Sie im Voraus wissen, welche Art von Daten in diesem Feld sind und Sie werden genau abfragen, was Sie wollen, dann ist "not_analyzed" das, was Sie wollen.

Beispiel:

erhalten alle Protokolle von server123.

Abfrage: "Server: Server123".

doc1 :server:server123,log:randomstring,date:01-jan 
doc2 :server:server986,log:randomstring,date:01-jan 
doc3 :server:server777,log:randomstring,date:01-jan 
doc4 :server:server666,log:randomstring,date:01-jan 
doc5 :server:server123,log:randomstring,date:02-jan 

Ergebnisse nur von server1 und server5.

und ich hoffe, Sie bekommen den Punkt. Wie gesagt, halte es einfach, was du brauchst.

analysiert -> mehr Speicherplatz auf der Festplatte (viel mehr, wenn die Analyse Filds groß sind). analysiert -> mehr Zeit für die Indexierung. analysiert -> besser für passende Dokumente.

not_analyzed -> weniger Speicherplatz auf der Festplatte. not_analyzed -> weniger Zeit für die Indexierung. not_analyzed -> exakte Übereinstimmung für Felder oder Verwendung von Platzhaltern.

Grüße,

Daniel

+0

Danke für die Antwort! Ich habe ein paar Fragen: Ist nicht_analysiert wirklich Groß-und Kleinschreibung? Ich lese, dass Kibana die Suche immer Kleinbuchstaben, also Servername: Server01 würde bedeuten, dass es nicht gesucht werden konnte? und wie wäre es mit Regexp-Suchen? Schließlich macht es für eine Reihe von 30 Servern Sinn, überhaupt darüber nachzudenken, um welchen Typ es sich handelt. Ich nehme an, die Geschwindigkeit und Größenänderung wäre minimal ... – higuita

+1

(Not_analozed) Es ist Groß-und Kleinschreibung, aber es bedeutet nicht, das Feld ist nicht durchsuchbar, wenn Sie "Server01" dann müssen Sie nach "Server01" suchen, " server01 "stimmt nicht mit dem Dokument überein. Wenn Sie nach einem Feld suchen, das analysiert wird, wird das Such-Keyword von ES in Token umgewandelt. Wenn das Feld, das Sie suchen, jedoch nicht -analisiert ist, wird es von ES nicht kleingeschrieben. Letztlich hängt es nicht von der Anzahl der Dokumente ab, sondern von der Größe des Feldes, für das "Serverfeld", wenn man überhaupt keine Sonderzeichen für dieses Feld verwenden möchte, kann man gut analysieren;) –