0
私は、インデックスであるtype
の整数です。coordinates
はジオポイントであり、title
は文字列です。一致するものをtitle
に照会したい次に条件付きで結果をフィルタリングする必要があります。それらが半径15km以内に収まる場合は、type
のレコードを含める必要があります。 type
2でないものは、半径が7.5キロ以内の場合にのみ含める必要があります。以下のクエリはこれを実現しません。むしろ、私の索引の構造についていくらか考えてもらいました。このクエリは、タイプ2で15 km以内の一致するレコードを返します。私はこのクエリーを、タイプ2(すなわち、1)でない一致するレコードも含めて、7.5キロ以内に収まるようにすることを望みます。これは単一のESクエリで達成可能ですか?私のフィルタリング条件ロジックのElasticsearchの条件付きフィルタ
擬似コード:
if type == 2
filter
distance: 15 km
else
filter
distance 7.5 km
問合せ:
{
"query": {
"filtered": {
"query": {
"match": {
"title": "my search terms"
}
},
"filter": {
"and": [
{
"geo_distance": {
"distance": "15km",
"coordinates": [
-79.3931,
43.6709
]
}
},
{
"term": {
"type": "2"
}
}
]
}
}
}
}
ES 2.3
この加工さありがとうございました。 'constant_score'>' filter'の下に外側の 'bool'をネストする必要があります – Abd00s
ES 2.xでは必要ありませんが、うまくいきました。 – Val