检查文档是否是Elasticsearch查询的一部分?

时间:2020-07-21 03:04:52

标签: elasticsearch

对于是否有某种方法可以检查文档ID是否属于大型(超过一百万个结果)Elasticsearch查询/过滤器的一部分感到好奇。

基本上,我会有一组相关的文档ID,并且只在它们属于较大查询时才返回。希望能做数据库方面。从理论上讲,这似乎是可行的,因为ES必须缓存与大滚动有关的内容。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的用例,但是您需要了解,Elasticsearch(ES)不会在搜索结果中返回所有匹配的文档ID,并且默认情况下仅返回响应中的10个文档,可以通过更改size parameter

如果您增加大小参数并在查询中包含数百万个匹配文档,则ES查询性能将非常糟糕,并且如果您经常触发此类查询(在没有断路器的情况下),甚至可能使整个集群崩溃。对此要谨慎。

您是正确的,ES会缓存内容,但是再次提醒您,如果您尝试缓存大量数据并且非常频繁地使数据失效,那么您将无法获得所需的性能优势,因此最好针对它进行基准测试。

您已经在正确的使用路径上,滚动API可以迭代数百万个搜索结果,只需查看以下几点即可进一步改善。

  1. 首先获取搜索结果的计数,该计数包含在默认搜索响应中,其值为eqgreater,可让您了解到,根据多少搜索结果,您可以将{ {1}}参数,供后续调用查看您的ID是否存在。
  2. 查看您是否在查询中有效利用了filters context(默认情况下缓存在ES中)。
  3. 使用数据对一些沉重的滚动API调用进行基准测试。
  4. 引用this线程来微调集群和索引配置,以进一步优化ES响应。
相关问题