具有地理边界框过滤器的嵌套对象上的Elasticsearch过滤器

时间:2014-05-22 13:31:46

标签: geolocation elasticsearch nested

我有几天的问题,我不知道如何解决它。

我正在使用elasticsearch 1.1.0。

我有一个包含以下映射的类型:

    {
    "location": {

       " type": "nested",
       " properties": {
            "accuracy": {
                "type": "long"
            },
            "date": {
               " type": "date"
                "format": "dateOptionalTime"
            },
        ...
        "point": {
            "type": "geo_point"
        }
    }

} 

我使用elasticsearch的地理边界框过滤器创建了一个过滤器:

 {
   "query":{
      "filtered":{
         "query":{
            "match_all":{

            }
         },
         "filter":{
            "nested":{
               "filter":{
                  "geo_bbox":{
                     "point":{
                        "top_left":[
                           4.559326171875,
                           45.08127861241874
                        ],
                        "bottom_right":[
                           5.2130126953125,
                           44.692088041727814
                        ]
                     }
                  }
               },
               "path":"location"
            }
         }
      }
   }
}

但是当我试图渗透这个显然位于边界框内的文档时,我没有匹配:

{
  "doc": {
    "location": {
      "point": "44.933, 4.9",
      "date": "2014-05-21T08:40:05"
    }
  }
}

知道我为什么会遇到这个问题。有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我终于在一些ElasticSeearch开发者的帮助下找到了问题的解决方案。

我引用:

“toplevel类型字段强制定义在解析percolator查询期间使用的映射。如果未指定,它会尝试在geonestedindex索引中的所有映射中自动解析查询中的字段,并且可能存在其他类型的其他位置字段,最终可能会被使用。“

事实上,在我的映射中,我有两种类型的属性

 "point": {
            "type": "geo_point"
        }

因此,如果在我的过滤器中我没有指定类似的类型,则渗透从未匹配:

  {
       "query":{
          "filtered":{
             "query":{
                "match_all":{

                }
             },
             "filter":{
                "nested":{
                   "filter":{
                      "geo_bbox":{
                         "point":{
                            "top_left":[
                               4.559326171875,
                               45.08127861241874
                            ],
                            "bottom_right":[
                               5.2130126953125,
                               44.692088041727814
                            ]
                         }
                      }
                   },
                   "path":"location"
                }
             }
          }
       },
       "type": "myType"
    }

使用此过滤器,文档可以轻松匹配。