有谁知道在Elasticsearch中实现联盟的最简单方法是什么?
我有许多带有disease_name
和lat/lon
字段的文档。
例如
{
"disease_name": 'Flu',
"location": {
"lat": 41.12,
"lon": -71.34
}
}
我想查找所有地理多边形内发生的所有疾病。
(OR查询不是合适的选项,因为它可能会发现仅存在于一个区域中的任何疾病)。
作为一个“查找一个或多个”,这很容易,因为它只是一个具有多个多边形并运行Elasticsearch术语集合的OR查询。
EDIT -有关用例的其他信息
我希望执行一个UNION和INTERSECT。
以编程方式,暂时忘记了ES,我实现此目标的方式如下:
[
{
"disease_name": 'Flu',
"location": {
"lat": 41.12,
"lon": -71.34
}
},
...
]
我希望尽可能避免以编程方式执行此操作。
最佳答案
确保您具有正确的 map (作为地理位置的地理位置),
我认为这可能会有所帮助。
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"
}
}
}
}
在这里,您可以更改坐标,如果要为其他多边形添加类似的滤镜。
希望这可以帮助!!
关于java - Elasticsearch Geo Point Union或类似产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25063018/