1

我正在构建一项服务,允许用户根据 GPS 坐标搜索附近的其他用户。我尝试过使用 ElasticSearch 的地理空间索引。当用户登录时,他会将他的 GPS 位置提交到 ElasticSearch 地理索引。其他用户定期轮询 ElasticSearch,查询包含几百米内 GPS 坐标的新文档。

问题是 ElasticSearch 要么没有足够快地更新它的索引,要么它缓存了它的结果,使其不适合检索实时结果。我尝试使用 index.cache.filter.max_size=-1 禁用缓存,并在每个查询中传递“_cache=false”。当使用相同的查询进行轮询时,ElasticSearch 仍会返回陈旧的结果,并且最多可能会返回几分钟的陈旧结果。

对可能发生的事情有任何想法吗?也许是因为我在轮询期间保持打开相同的连接,并且 ElasticSearch 为每个连接缓存结果?尽管如此,结果可能会因后续请求而过时。

4

1 回答 1

3

Elasticsearch 结果不会立即可供搜索。它们累积在缓冲区中,并且只有在称为refresh的操作之后才可用。换句话说,搜索不是实时的,而是“接近实时”的操作(“接近”是因为默认每秒调用一次刷新)。另请注意,获取操作是实时的 - 您可以在文档被索引后立即获取。

虽然您可以在每个文档之后强制刷新过程或使其更频繁,但这并不是解决您的问题的最佳解决方案,因为非常频繁的刷新会显着降低搜索和索引性能。相反,我建议您检查 Elasticsearch percolators,它是为您的用例而添加的。

于 2013-10-25T14:49:18.480 回答