查询elasticsearch时,只返回命中文档。如何获得点击的上下文,比如,点击前后的10个文档?
例如,我在elasticsearch中插入了5个日志:
{"log": "a"}
{"log": "b"}
{"log": "c"}
{"log": "d"}
{"log": "e"}
我已经搜索了"query": { "match": { "log": "e" } }
,es将返回第五份文件。但是,我可能需要前面的4条日志进行调试,es能返回上下文吗?
发布于 2017-06-07 06:38:45
也许我的回答可能不是一个完整的答案,但我想分享我的意见,以解决这个问题。
首先,您希望获得像grep
应用程序after
和before
特性这样的结果。据我所知,Elasticsearch可以根据与文档匹配的术语找到文档,并且不按文档的顺序来考虑最近的文档。在我看来,你可以用两种方法解决这个问题。第一种是在摄入时将相对数据填充到文档中,第二种是执行第二次查询以查找相关数据。
对于第一种方法,您将有不必要的重复数据,这将导致性能问题或需要更多的存储,cpu或ram等。但是您可以用一个查询来获取数据和相关数据。要处理这个问题,您可以使用logstash的https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html过滤器,同时将您的日志摄入到Elasticsearch。
对于第二种方法,您将非常酷:)。摄入部分不会发生任何变化,但是您应该更改应用程序的表示部分。另一方面,在Kibana上使用ElasticStack 5.4时,有一个新的特性,就是文档上下文。您可以轻松地到达围绕特定文档的文档。我还没有尝试,但我想,这可能和第二种方法是一样的。
更新:
我已经检查了Kibana周围的文档特性,它使用了search_after api。
https://stackoverflow.com/questions/44363913
复制相似问题