我有几天的问题,我不知道如何解决它。
我正在使用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"
}
}
}
知道我为什么会遇到这个问题。有人能帮帮我吗?
答案 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"
}
使用此过滤器,文档可以轻松匹配。