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
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
(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;) –