Ich habe ein Feld in Elasticsearch mit dem Wert "PEI.H.02354.01.". Als ich suche mit querystring
alsElasticsearch Suche scheitert in Feld mit Sonderzeichen und Platzhalter
{
"query":{
"query_string":{
"query":"field:PEI.H.02354.01.",
"default_operator":"AND"
}
}
}
dann ein Ergebnis zurückgegeben wird, was das richtige Verhalten ist. Wenn ich jedoch mit einem Platzhalter suche, werden keine Ergebnisse zurückgegeben, z.
{
"query":{
"query_string":{
"query":"field:PEI.H.02354.01.*",
"default_operator":"AND"
}
}
}
Das Feld ist vom Typ string und wird analysiert. Im Folgenden finden Sie den Code, der den Index erstellt, einschließlich des Analysators und der Zuordnungen.
{
"settings":{
"analysis":{
"analyzer":{
"number":{
"type":"custom",
"tokenizer":"keyword",
"filter":[
"lowercase"
],
"char_filter":[
"number_filter"
]
},
"diacritical":{
"type":"custom",
"tokenizer":"standard",
"filter":[
"standard",
"lowercase",
"asciifolding",
"nfd_normalizer"
]
}
},
"filter":{
"nfd_normalizer":{
"type":"icu_normalizer",
"name":"nfc"
}
},
"char_filter":{
"number_filter":{
"type":"pattern_replace",
"pattern":"[^\\d]+",
"replacement":""
}
}
}
},
"mappings":{
"testType":{
"_source":{
"enabled":false
},
"_all":{
"enabled":false
},
"_timestamp":{
"enabled":"true",
"store":"yes"
},
"properties":{
"field":{
"store":"yes",
"type":"string",
"index":"analyzed",
"analyzer":"diacritical"
}
}
}
}
Schließlich wird ein Probeneinsatz
{
field: "PEI.H.02354.01."
}
Hat jemand eine Ahnung, warum dies geschieht und wie diese zu lösen?
Mit diesem in der Tat Ergebnisse liefert, aber nicht alle von ihnen richtig sind, z.B. Ich bekomme auch PEI.H.4545.01. Dies ist sinnvoll, wenn, wie Sie gesagt haben, der Suchbegriff analysiert wird und grundsätzlich nach dem gesucht wird, was ES sucht. Pei.h OR 02354.01. Aber gibt es einen Weg, dies zu vermeiden und nach PEI.H.02354.01 zu suchen. als Ganzes, anstatt es in zwei Begriffen zu brechen? – dchar
Es klingt, als ob Sie PEI.H.02354.01 als eine einzige Zeichenfolge behandeln möchten - falls dies erforderlich ist, müssen Sie Ihren Analysator ändern, z. nur auf Leerzeichen tokenisieren. –
Möglicherweise für diese Art der Suche sollten Sie ein Multi-Feld mit einem anderen Analysator verwenden. –