Elasticsearch查询不返回_scroll_id用于滚动查询。

3
我们有一个 Elasticsearch 集群,似乎一切正常,但是滚动却无法工作。当我使用 ?scroll=1m 查询字符串进行查询时,结果中没有返回 _scroll_id。 为了检查是否与现有索引有关,我创建了一个新的索引:
PUT scroll_test

POST scroll_test/1
{
    "foo": "bar"
}

POST scroll_test/2
{
    "foo": "baz"
}

POST /scroll_test/_search?scroll=1m
{
    "size": 1, 
    "query": {
        "match_all": {}
    }
}

返回值

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 3,
      "max_score": 1,
      "hits": [
         {
            "_index": "scroll_test",
            "_type": "1",
            "_id": "AV0N_R0jl33mdjPtW4uQ",
            "_score": 1,
            "_source": {
               "foo": "bar"
            }
         }
      ]
   }
}

我们刚刚完成了从v5.2到v5.4.3的滚动升级(群集健康状态现在为绿色)。但是在升级到v5.4.3后,滚动仍然无法正常工作。
我可以在本地运行Elasticsearch v5.4.2实例上执行基于滚动的查询。

很奇怪。我在ES 5.4.3上执行了与您相同的请求,但我得到了一个scroll_id。您用什么发送搜索/滚动请求?因为这看起来像是?scroll=1m参数被截断/忽略了。 - Slomo
我正在使用Sense Chrome插件。使用.NET库时,我也没有收到_scroll_id的返回。 - Phil Peace
我现在真的没有什么主意。也许你可以比较一下两个ES实例的配置/插件。特别是通过GET /_nodes列出的模块和插件。如果没有区别,那么恐怕我就没有更多的想法了。 - Slomo
你解决了这个问题吗? - Ranjith Reddy
1个回答

0

在阅读了许多其他问题后,我得出了以下主要观点:

  • 聚合无法滚动

    • 我从Kibana“Discover”页面的“检查”按钮中复制的查询具有此功能,但我不知道它在做什么,而且我能够删除它并获得良好的结果。
  • 不要使用滚动, 直接使用 search_after:

    • 文档说明:我们不再建议使用滚动API进行深度分页。如果您需要在超过10,000个命中记录中进行分页时保留索引状态,请使用带有时间点(PIT)的search_after参数。

我不确定聚合是否也会错过search_after,但为了安全起见,我现在不使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接