发布于 2016-02-29 14:28:51 | 238 次阅读 | 评论: 0 | 来源: 网络整理
因为如下两个原因,地理位置过滤器默认是不被缓存的:
地理位置过滤器通常是用于查找用户当前位置附近的东西。但是用户是在移动的,并且没有两个用户的位置完全相同,因此缓存的过滤器基本不会被重复使用到。
缓存对于地理位置过滤器也可以很有效。 假设你的索引里包含了所有美国的宾馆。一个在纽约的用户是不会对旧金山的宾馆感兴趣的。 所以我们可以认为纽约是一个热点(hot spot),然后画一个边框把它和附近的区域围起来。
如果这个地理盒模型过滤器
(geo_bounding_box
)被缓存起来,那么当有位于纽约市的用户访问时它就可以被重复使用了。 它可以直接排除国内其它区域的宾馆。然后我们使用未缓存的,更加明确的地理盒模型过滤器
(geo_bounding_box
)或者地理距离过滤器
(geo_distance
)来在剩下的结果集中把范围进一步缩小到用户附近:
GET /attractions/restaurant/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"geo_bounding_box": {
"type": "indexed",
"_cache": true, <1>
"location": {
"top_left": {
"lat": 40,8,
"lon": -74.1
},
"bottom_right": {
"lat": 40.4,
"lon": -73.7
}
}
}
},
{
"geo_distance": { <2>
"distance": "1km",
"location": {
"lat": 40.715,
"lon": -73.988
}
}
}
]
}
}
}
}
}