Ich benutze Elasticsearch, um Autosuggestions auf einer Suchleiste zu geben, aber ich möchte, dass es nur den Anfang der Wörter übereinstimmt. Z.B.Elasticsearch - Ergebnisse für Autovervollständigung nur für Anfang der Wörter
doc_name_1 = "black bag"
doc_name_2 = "abla bag"
Fall 1. Auf Suchleiste Zeichenfolge part_string = "bla"
die Abfrage, die ich zur Zeit bin mit
query_body = {"query": {
"match": {
"_all": {
"query": part_string,
"operator": "and",
"type": "phrase_prefix"
}
}
}}
ist diese Abfrage gibt Zugriffe auf doc_name_1
und doc_name_2
.
Was ich brauche ist, nur auf doc_name_1
Hit seit doc_name_1
startet nicht auf die gleiche Weise wie die Zeichenfolge abgefragt. Ich versuchte mit "type":"phrase"
aber ES geht "nach innen" die Wörter in den Dokumenten. Ist es möglich, dies nur durch Ändern der Abfrage zu tun? oder Einstellungen?
Ich werde meine ES Einstellungen teilen:
{ "analysis":{
"filter":{
"nGram_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram":20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}},
"analyzer":{
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter":[
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type":"custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}}}}
Ich versuche, die Kante N-Gramm zu verwenden, aber sollte ich es in den Einstellungen zusammen mit dem N-Gramm-Analysator oder INSTEAD davon hinzufügen? bekomme diesen Fehler "Analyzer [nGram_analyzer] nicht gefunden für Feld [_all]" –
Sorry, löste das Problem im letzten Kommentar, es hatte mit dem Mapping der Dokumente zu tun. –
Ja, Sie müssen neue Einstellungen hochladen und dann neue Zuordnungen hochladen und alle Ihre Dokumente erneut auf der ES neu indizieren. – user3775217