AWSが管理するElasticsearchサービスを使用し、最近1.5から2.3にアップグレードしました。私たちはpythonでelasticsearch-dslパッケージを使用してクエリを作成し、ほとんどのクエリを移行することができましたが、私が試したことにかかわらずgeo_distanceは壊れています。elasticsearchに更新した後にネストされたジオポイントを見つけることができません2.3
マッピング:
{
'company': {
'properties': {
'id': {'type': 'integer'},
'company_number': {'type': 'string'},
'addresses': {
'type': 'nested',
'properties': {
'postcode': {'type': 'string', 'index': 'not_analyzed'},
'location': {'type': 'geo_point'}
}
}
}
}
}
Pythonコードelasticsearch-DSLの==とライブラリーによって生成された0.0.11
test_location = '53.5411062377, -2.11485504709'
test_distance = "3miles"
location_filter = F("geo_distance",
location=test_location,
distance=test_distance)
query = query.filter("nested",
path="addresses",
filter=location_filter)
クエリ作業:
{'query': {'filtered': {'filter': {'nested': {'filter': {'geo_distance': {'distance': u'3miles', 'location': '53.5411062377, -2.11485504709'}}, 'path': 'addresses'}}, 'query': {'match_all': {}}}}}
を私たちは、ブランドを作成しました同じマッピングを持つ新しい2.3の新しいインデックス
== 2.1.0-DSLのelasticsearchし、更新およびクエリにフィルタを変換しようとした後、次のクエリを生成
geo_query = Q({"bool": {
"must": [
{
"geo_distance": {
"distance": "test_distance",
"addresses__location": test_location,
}
},
]
}})
:
{'query': {'bool': {'must': [{'geo_distance': {'distance': '3 miles', u'addresses.location': {'lat': '53.5411062377', 'lon': '-2.11485504709'}}}]}}}
を私たちは、次の例外が出ます:
「location」、「addresses.location」、「ad」フィールドを参照しようとしましたが、ドレスを作成し、古いネストされたクエリタイプを使用します。私はマッピングがもはや2.3で有効でないか、または私が間違ったクエリを構築しているかどうかわかりません。
クエリ
Q({'nested': {'filter': {
'geo_distance': {'distance': u'3miles', 'location': '53.5411062377, -2.11485504709'}
},
'path': 'addresses.location'}})
は、次のエラーを生成します
RequestError: TransportError(400, u'search_phase_execution_exception', u'[nested] nested object under path [addresses.location] is not of nested type')
私はlat_lon追加する必要があると思う:仕事にgeodistanceクエリのマッピングに真のが、例のどれもがそれを持っていません。
お手数をおかけしますようお願い申し上げます。
'PATH'は' addresses'でなければならず、 'geo_distance'フィルタであなただけではなく、' "場所" の ' "addresses.locationを"' '持っている必要があります – Val
申し訳ありませんが、私'.location'と一緒にそれを試してみました。 – marklar
あなたは以下の答えを試すことができますか? – Val