[英]Elasticsearch multi field query
我無法在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返回相同查詢的准確結果。
到目前為止的假設/條件:
關於如何改善搜索重用的任何建議?
嘗試使用cross_fields而不是most_fields作為multi_match的類型。
從文檔:
cross_fields類型對於結構化文檔(其中多個字段應匹配)特別有用。 例如,當在first_name和last_name字段中查詢“ Will Smith”時,最匹配的一個字段中可能有“ Will”,而另一個字段中有“ Smith”。
您正在使用的most_fields似乎是用於搜索相同的文本,但是以不同的方式進行了分析。
查詢示例:
GET /adr-address/_search
{
"query": {
"multi_match": {
"query": "mainstreet, houston",
"type": "cross_fields",
"fields": [ "street", "city", "zipcode"]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.