有谁知道在Elasticsearch中实现联合的最简单方法是什么?
我有很多带有字段disease_name
和lat/lon
字段的文档。
e.g。
{
"disease_name": 'Flu',
"location": {
"lat": 41.12,
"lon": -71.34
}
}
我想找到所有地理多边形中出现的所有疾病。 (OR查询不是一个合适的选择,因为这可能会发现仅存在于一个区域的任何疾病。)
这很容易作为'找到一个或多个',因为它只是一个包含多个多边形的OR查询并运行Elasticsearch术语聚合。
编辑 - 有关用例的其他信息
我希望执行UNION和INTERSECT。 以编程方式,暂时忘记ES,我实现这一目标的方式如下:
假设我有大量文档
[
{
"disease_name": 'Flu',
"location": {
"lat": 41.12,
"lon": -71.34
}
},
...
]
假设我定义了多个地理数据块(地理多边形)。
我希望尽可能避免以编程方式执行此操作。
答案 0 :(得分:2)
确保您具有正确的映射(作为位置的地理位置),
我认为这可能会有所帮助。
POST x/diseases/_search
{
"size": 0,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"and": {
"filters": [
{
"geo_polygon": {
"location": {
"points": [
{
"lat": 40.73,
"lon": -74.1
},
{
"lat": 40.83,
"lon": -75.1
}
]
}
}
},
{
"geo_polygon": {
"location": {
"points": [
{
"lat": 40.73,
"lon": -74.1
},
{
"lat": 40.83,
"lon": -75.1
}
]
}
}
}
]
}
}
}
},
"aggs": {
"diseases": {
"terms": {
"field": "disease_name"
}
}
}
}
在这里,您可以更改坐标,如果要为其他多边形添加类似的过滤器。
希望这有帮助!!