私はこれを理解するために頑張った。私のような時間を持つレコードとGPSを持っている:GPSのElasticSearch集約交差点
{ID: 1,Time:"2017-01-1",gps:{lat:38.00,lon:-79.00}},
{ID: 2,Time:"2017-01-1",gps:{lat:38.00,lon:-79.00}},
{ID: 1,Time:"2017-01-2",gps:{lat:39.00,lon:-77.00}},
{ID: 2,Time:"2017-01-2",gps:{lat:20.00,lon:-20.00}},
{ID: 1,Time:"2017-01-3",gps:{lat:20.00,lon:-20.00}},
{ID: 3,Time:"2017-01-1",gps:{lat:20.00,lon:-20.00}},
..........
私が円を描くと地域を選択することができますマップを持っています。現在、選択した場所のANYに表示されているレコードを簡単に照会して集計できます。これは例です:
{
"query": {
"bool": {
"should": [
{
"geo_distance": {
"distance": 56100.0,
"gps": {
"lat": 38,
"lon": -79
}
}
},
{
"geo_distance": {
"distance": 56100.0,
"gps": {
"lat": 39,
"lon": -77
}
}
}
]
}
},
"aggs": {
"by_record_id":{
"terms": {
"field": "id"
}
}
}
}
しかし、私は選択肢の交差点を取得するにはちょっと困惑しています。 (注:サークルは重複していません)。本質的に、私は両方のサークルに登場したgps値を持つレコードの集計をしたいと思います。たとえば、上記のレコードでは、ID = 1(ID = 2とID = 3は両方の円に表示されないため)の集計結果のみを必要とします。
クエリを{"query":{"bool":{"must":[...]}}}に変更すると、結果は得られません。明らかに、2つの場所に同時にレコードが表示されないためです。
function_score(関数内の各場所の配置)やスコアの利用(さまざまなスコアの種類に基づく)など、さまざまなことを試してみました。さらに、top_hits、cardinality(precision_threshold)、cardinalityを持つbucket_selectorでフィルタリングするなど、さまざまな集約の組み合わせを試しました。
これはSQLでは非常に簡単で明白です。 elasticsearch nubeを手伝ってください。
私はこれについて書面でメモしました。 'must'を使うことはできません。結果は返されません。 – Andrew
ohhh私は今参照してください。私はあなたがバケットセレクターpiplineアグリゲーションを使用することができると思います あなたはそれを見ることができます[ここ](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-selector-aggregation .html)。 構文がちょっと面倒ですが、 – tomas
の場合はelasticsearchリンクよりも優れた例が必要でしょうか?個別のフィルタ/用語を作成する必要がありますか(例:1つの場所にフィルタをかける/ IDに集約する)?したがって私の場合、私はloc1とloc2を持っていますか? bucket_selectorを使って交差点を計算しますか? スクリプトはどのように動作させるのですか? – Andrew