现在寻找一下,看看是否可行。
我的文档在映射中有两个地理位置。
我正在寻找一个查询,我可以在originGeo和y miles of destinationGeo的x英里内找到所有文档。
我目前正在尝试这两种不同的方式:
这不是我想要的,因为它每个地点使用相同的距离。但是,它似乎也只返回与destinationGeo有关的文件。
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [],
"must_not": [{
"term": {
"system": "boo"
}
}]
}
},
"query": {
"filtered": {
"filter": {
"geo_distance": {
"distance": "1mi",
"originGeo": {
"lat": 33.9962144,
"lon": -118.46887759999998
},
"destinationGeo": {
"lat": 34.0348144,
"lon": -117.58480250000002
}
}
}
}
}
}
}
}
这导致解析错误:过滤器格式错误,start_object之后没有字段
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [],
"must_not": [{
"term": {
"system": "boo"
}
}]
},
"geo_distance": {
"distance": "1mi",
"originGeo": {
"lat": 33.9962144,
"lon": -118.46887759999998
},
"destinationGeo": {
"lat": 34.0348144,
"lon": -117.58480250000002
}
}
}
}
}
}
任何帮助都会一如既往地受到赞赏!
答案 0 :(得分:1)
ES 2.x及更高版本的以下查询应该执行您需要的操作
{
"query": {
"bool": {
"filter": [
{
"geo_distance": {
"distance": "1mi",
"originGeo": {
"lat": 33.9962144,
"lon": -118.46887759999998
}
}
},
{
"geo_distance": {
"distance": "1mi",
"destinationGeo": {
"lat": 34.0348144,
"lon": -117.58480250000002
}
}
}
],
"must_not": [
{
"term": {
"system": "boo"
}
}
]
}
}
}
如果你在ES 1.x上运行,那么你可以使用这个:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"geo_distance": {
"distance": "1mi",
"originGeo": {
"lat": 33.9962144,
"lon": -118.46887759999998
}
}
},
{
"geo_distance": {
"distance": "1mi",
"destinationGeo": {
"lat": 34.0348144,
"lon": -117.58480250000002
}
}
}
],
"must_not": [
{
"term": {
"system": "boo"
}
}
]
}
}
}
}
}