ES-Fuzzy-Abfrage

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

  1. 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

  2. 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"
}
min_gram: Der Mindestschwellenwert für die Aufteilung von Zeichen, um einen Index zu erstellen
max_gram: Erstellt den maximalen Schwellenwert der durch den Index geteilten Zeichen
ngram: Beginnen Sie mit jedem Zeichen und führen Sie entsprechend der Schrittgröße eine Wortsegmentierung durch, die zum Abrufen von Präfixen und Infixen geeignet ist
Edge_ngram: Beginnend mit dem ersten Zeichen, entsprechend der Schrittgröße, Wortsegmentierung, geeignet für Präfix-Matching-Szenarien

おすすめ

転載: blog.csdn.net/qq_38747892/article/details/129670503