1. Präfixsuche: Präfixkonzept
: Suchen, die mit xx beginnen, berechnen nicht den Relevanzwert.
Notiz:
Präfixsuchen stimmen mit Begriffen überein (genaue Wertsuche), nicht mit Feldern.
Die Leistung der Präfixsuche ist sehr schlecht.
Es gibt keinen Cache für
die Präfixsuche. Stellen Sie die Präfixlänge für die Präfixsuche so lang wie möglich ein.
Grammatik:
json GET <index>/_search
{
"query": {
"prefix": {
"<field>": {
"value": "<word_prefix>"
}
}
}
}
index_prefixes: 默认 "min_chars" : 2, "max_chars" : 5
Platzhalter: Platzhalter
Konzept: Platzhalteroperatoren sind Platzhalter, die einem oder mehreren Zeichen entsprechen. Beispielsweise stimmt der Platzhalteroperator * mit null oder mehr Zeichen überein. Sie können Platzhalteroperatoren mit anderen Zeichen kombinieren, um Platzhaltermuster zu erstellen.
Notiz:
Platzhalter stimmen auch mit Begriffen überein, nicht mit Feldern
Grammatik:
json GET <index>/_search
{
"query": {
"wildcard": {
"<field>": {
"value": "<word_with_wildcard>"
}
}
}
}
Regulär: regulärer Ausdruck
Konzept: Die Leistung von Regexp-Abfragen kann je nach bereitgestelltem regulären Ausdruck variieren. Um die Leistung zu verbessern, sollten Platzhaltermuster wie . oder .?+ohne Präfix oder Suffix vermieden werden
Grammatik:
json GET <index>/_search
{
"query": {
"regexp": {
"<field>": {
"value": "<regex>",
"flags": "ALL"
}
}
}
}
Flaggen
ALLE
Aktiviert alle optionalen Operatoren.
ERGÄNZEN
Aktivieren Sie den Operator. Die Negation des kürzesten Musters unten kann verwendet werden . Zum Beispiel
a~bc # entspricht 'adc' und 'aec', aber nicht 'abc'
INTERVALL
Aktiviert den <>-Operator. Sie können <> verwenden, um Wertebereiche abzugleichen. Zum Beispiel
foo<1-100> # entspricht 'foo1', 'foo2' … 'foo99', 'foo100'
foo<01-100> # entspricht „foo01“, „foo02“ … „foo99“, „foo100“
ÜBERSCHNEIDUNG
Aktiviert den &-Operator, der als UND-Operator fungiert. Wenn sowohl das linke als auch das rechte Muster übereinstimmen, ist die Übereinstimmung erfolgreich. Zum Beispiel:
aaa.+&.+bbb# entspricht 'aaabbb'
ANYSTRING
Aktiviert den @-Operator. Sie können @ verwenden, um eine beliebige ganze Zeichenfolge abzugleichen. Sie können den @-Operator mit den Operatoren & und ~ kombinieren, um eine „Alles außer“-Logik zu erstellen. Zum Beispiel:
@&~(abc.+) # stimmt mit allem überein, außer mit Begriffen, die mit „abc“ beginnen.
2. Fuzzy-Abfrage: Fuzzy-
verwirrte Zeichen (Box → Fuchs) fehlende Zeichen (Schwarz → Mangel)
zusätzliches Zeichen (sic → sick) umgekehrte Reihenfolge (act → cat)
Grammatik
json GET <index>/_search
{
"query": {
"fuzzy": {
"<field>": {
"value": "<keyword>"
}
}
}
}
Parameter:
Wert: (erforderlich, Schlüsselwort)
Unschärfe: Bearbeitungsabstand (0, 1, 2) ist nicht so groß wie möglich, hohe Rückrufrate, aber ungenaue Ergebnisse
-
Der Damerau-Levenshtein-Abstand zwischen zwei Textteilen ist die Anzahl der Einfügungen, Löschungen, Ersetzungen und Transpositionen, die erforderlich sind, damit eine Zeichenfolge mit der anderen übereinstimmt
-
Distanzformel: Levenshtein ist Lucene, es verbesserte Version: Damerau-Levenshtein,
axe=>aex Levenshtein=2 Damerau-Levenshtein=1
Transpositionen: (optional, boolesch) Gibt an, ob die Bearbeitung Transpositionen zweier benachbarter Zeichen (ab → ba) umfasst. Der Standardwert ist wahr
3. Phrasenpräfix: matchphraseprefix
match_phrase:
match_phrase teilt Wörter auf.
Das Suchfeld muss alle Begriffe in match_phrase enthalten und die Reihenfolge muss gleich sein. Es
dürfen keine anderen Begriffe zwischen den Begriffen in match_phrase im Suchfeld enthalten sein
Konzept:
matchphraseprefix ist dasselbe wie match_phrase, verfügt jedoch über eine weitere Funktion: Es ermöglicht den Präfixabgleich für den letzten Begriff (Begriff) des Textes. Wenn es sich um ein Wort handelt, z. B. a, wird es mit allen Dokumenten abgeglichen Beginnend mit a im Dokumentfeld führt er, wenn es sich um eine Phrase wie „das ist ma“ handelt, zunächst eine Präfixsuche mit ma im invertierten Index durch und führt dann eine Matchphrase-Abfrage im übereinstimmenden Dokument durch (einige weiter). Sagen Sie im Internet zuerst diese Übereinstimmungsphrase und führen Sie dann eine Präfixsuche durch, was falsch ist.)
Parameter
Der Analysator gibt an, welcher Analysator die Phrase segmentieren soll.
max_expansions begrenzt die maximale Anzahl übereinstimmender Begriffe,
die Boost zum Festlegen der Gewichtung der Abfrage verwendet.
Slop ermöglicht den Begriffsabstand zwischen Phrasen: Der Slop-Parameter teilt match_phrase mit, wie weit die Abfragebegriffe voneinander entfernt sind als Übereinstimmung angesehen? Das heißt, wie oft müssen Sie den Begriff verschieben, damit die Abfrage mit dem Dokument übereinstimmt?
Prinzipanalyse: https://www.elastic.co/cn/blog/found-fuzzy-search#performance-considerations
N-Gramm und Kanten-Ngramm
Tokenizer
json GET _analyze
{
"tokenizer": "ngram",
"text": "reba always loves me"
}
Token-Filter
json GET _analyze
{
"tokenizer": "ik_max_word",
"filter": [
"ngram"
],
"text": "reba always loves me"
}