ElasticSearchでアドレス検索クエリをフレーミングする際に問題が発生しました。
アドレス{通り、 都市、郵便番号 }ここで弾性検索マルチフィールドクエリ
とサンプルクエリである:
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"
}
},
マルチマッチを
アドレスは、以下の構造を有するESに格納されます。通りに市の名前が含まれているシナリオを除いて、ほとんどの場合、クエリは正常に機能します。 Elasticsearchはこれらの結果に高い優先順位を割り当てますが、これは許容できなくても完全に理解できます。 GoogleマップのAPIは、同じクエリに対して正確な結果を返すことに留意すべきである
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)"
}
]
}
:ここ
は_analyze結果です。
今まで作られた仮定/条件:
- トークナイザは以下のとおりです。スペース、カンマ、数字など
- 入力用語は、任意の順序
検索リユースをどのように改善できるかについてのご意見はありますか?
:[ "都市"、 "郵便番号"、 "ストリート"]? –
はい、それは役に立たなかったし、また、_analyzeの説明は両方のフィールドのすべての用語を検索することを示しています – shailendher
私はcopy_toオプションが私の必要とするものだと思います。すべての値を新しいフィールドにコピーし、そこで検索を実行します。 https://www.elastic.co/guide/en/elasticsearch/guide/current/field-centric.html明日までにこれが動作するかどうかを知っておく必要があります。 – shailendher