我在ElasticSearch中構造地址搜索查詢時遇到了問題。Elasticsearch多字段查詢
的地址存儲在ES結構如下:
地址{ 街道, 城市, 郵政編碼 }
這裏是一個示例查詢:
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"
}
},
多比賽大多數情況下,查詢都可以正常工作,除了街道還包含城市名稱的情況。 Elasticsearch將這些結果賦予更高的優先級,即使不可接受,這也是完全可以理解的。
下面是_analyze結果:
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)"
}
]
}
應當指出的是,谷歌地圖API返回相同的查詢準確的結果。
假設/發到現在爲止條件:
- 斷詞是:空格,逗號,數字等
- 輸入項可以按任何順序包含多字街道名稱,郵政編碼或城市
關於如何改進搜索reuslts的任何建議?
我不知道,但你有沒有試圖改變這個順序:[ 「城市」, 「郵政編碼」, 「街」]? –
是的,但它沒有幫助,也_analyze解釋顯示,它搜索字段 – shailendher
所有條款我猜copy_to選項是我所需要的。將所有值複製到新字段並在那裏運行搜索。 https://www.elastic.co/guide/en/elasticsearch/guide/current/field-centric.html我應該知道明天是否有效。 – shailendher