有谁知道在Elasticsearch中实现联盟的最简单方法是什么?

我有许多带有disease_namelat/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
        }
      },
      ...
    ]
    
  • 假设我定义了多个地理区域(地理多边形)。
  • 对于每种疾病,它是否存在于所有存储桶中,如果不存在,则将其丢弃。
  • 列出剩余文档的所有不同的disease_name值。

  • 我希望尽可能避免以编程方式执行此操作。

    最佳答案

    确保您具有正确的 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/

    10-15 20:19