Problem mit der Platzhaltersuche mit langem Datentyp in der Elasticsearch
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
Hier ist die Telefonnummer vom Typ lang und wir möchten eine Platzhaltersuche durchführen. Ich übergebe die Abfrage als 10 * ( "query":"10*",
) Die tatsächlichen Treffer sollten 15 gewesen sein, aber ich erhalte 0 Treffer.
Wenn ich dasselbe für ein Feld mit dem Typ Schlüsselwort (Zeichenfolge) Adresse mache , erhalte "query":"newyork*",
ich mit der Abfrage das Ergebnis.
Hat jemand eine Idee, warum wir die Treffer für Felder mit Typ Long nicht bekommen haben?
Antworten
Es ist nicht direkt möglich, Platzhalter für numerische Datentypen auszuführen. Es ist besser, diese Ganzzahlen in Zeichenfolgen umzuwandeln.
Hinzufügen eines Arbeitsbeispiels mit Indexdaten, Zuordnung, Suchabfrage und Suchergebnis
Indexzuordnung:
{
"mappings": {
"properties": {
"phoneNumber": {
"type": "text"
}
}
}
}
Indexdaten:
{
"phoneNumber": "101"
}
Suchanfrage:
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "10*",
"fields": [
"phoneNumber"
]
}
}
]
}
}
}
Suchergebnis:
"hits": [
{
"_index": "65109764",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"phoneNumber": "101"
}
}
]
Wenn Sie eine Teilübereinstimmung durchführen möchten, können Sie sogar den Edge-N-Gramm-Tokenizer verwenden