Ich habe Probleme beim Einrahmen einer Adresse Suchabfrage in ElasticSearch.Elasticsearch Multi-Feld-Abfrage
Die Adresse wird in IHM mit folgenden Struktur gespeichert:
Adresse { Straße, Stadt, zipcode }
Und Abfrage hier ist ein Beispiel:
GET /adr-address/_search
{
"query": {
"multi_match": {
"query": "mainstreet, houston",
"type": "most_fields",
"fields": [ "street", "city", "zipcode"]
}
}
}
"hits": [
{
"_source": {
"id": "S6v4xyO8UE5NRcWtmMATPQ==",
"street": "Houston 2nd Avenue",
"zipcode": "8032",
"city": "Houston"
}
},
{
"_source": {
"id": "aLgQFrO8zCT8m88lAnYZPQ==",
"street": "Houston 1st Avenue",
"zipcode": "8044",
"city": "Houston"
}
},
{
"_source": {
"id": "aLgQFrO8zCT8m88lAnYZPQ==",
"street": "mainstreet",
"zipcode": "8044",
"city": "Houston"
}
},
Der Multi Spiel Query funktioniert die meiste Zeit gut, mit Ausnahme des Szenarios, in dem Street auch den Namen der Stadt enthält. Elasticsearch räumt diesen Ergebnissen eine höhere Priorität ein, was völlig verständlich ist, auch wenn es nicht akzeptabel ist. Hier
ist das _analyze Ergebnis:
GET /adr-address/_validate/query?explain
{
"query": {
"multi_match": {
"query": "mainstreet, houston",
"type": "most_fields",
"fields": [ "street", "city", "zipcode" ]
}
}
}
{
"valid": true,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"explanations": [
{
"index": "adr-address",
"valid": true,
"explanation": "(zipcode:mainstreet zipcode:houston) (street:mainstreet street:houston) (city:mainstreet city:houston)"
}
]
}
Es sollte beachtet werden, dass Google Maps api genaue Ergebnisse für die gleiche Abfrage gibt.
- Tokenizer sind: Leerzeichen, Komma, Zahlen usw.
- Eingang Begriff kann mehr Wort Straßennamen, Postleitzahl oder Stadt in beliebiger Reihenfolge
Annahmen/Bedingungen bis jetzt gemacht
Irgendwelche Vorschläge, wie ich die Suchwiederholungen verbessern könnte?
Ich weiß nicht, aber haben Sie versucht, um die Reihenfolge zu ändern: [ "Stadt", "Postleitzahl", "Straße"]? –
Ja, aber es hat nicht geholfen und auch die _analyze Erklärung zeigt, dass es alle Begriffe in beiden Feldern – shailendher
sucht Ich denke, copy_to Option ist, was ich brauche. Kopieren Sie alle Werte in ein neues Feld und führen Sie die Suche dort aus. https://www.elastic.co/guide/en/elasticsearch/guide/current/field-centric.html Ich sollte wissen, ob das morgen funktioniert. – shailendher