当前位置: 首页 > 面试题库 >

使用带有滚动的NEST 2.x的ElasticSearch查询不会返回结果

商绍元
2023-03-14
问题内容

我正在尝试根据出现的消息从elasticsearch检索所有数据,我发现如果使用Scroll,我可以循环直到文档搜索结束,但是以下查询返回Documents
= 0但Total = 1954:

var response = client.Search<Log4Net>(s => s
                                            .Query(q => q.QueryString(qs => qs
                                             .DefaultField(m => m.Message).Query("\"" + message + "\"")))
                                             .SearchType(SearchType.Scan)
                                             .Scroll("60s"));
        while (response.Documents.Any())
        {
            var request = new BulkRequest();
            request.Refresh = true;
            request.Consistency = Consistency.One;
            request.Operations = new List<IBulkOperation>();
            foreach (var item in response.Documents)
            {
                request.Operations.Add(new BulkIndexOperation<Log4Net>(item));
            }

            var result = client.Bulk(request);

            response = client.Scroll<Log4Net>("60s", response.ScrollId);
        }

如果我使用滚动条,则文档为空,如果我删除并获得前1000条消息,则可以获取数据,我使用滚动条的方式有什么问题吗?


问题答案:

如果指定.SearchType(SearchType.Scan),则第一个响应不包含任何文档。它将为您提供.Total属性中的全部文档,这些属性将通过.ScrollId在滚动请求中使用on响应滚动来返回。

如果 未指定 .SearchType(SearchType.Scan),则第一个响应将包含第一组文档。

这是Elasticsearch的差异,不是NEST。SearchType.Scan实际上在2.1.0中已弃用,但仍在NEST 2.x中,因为它支持Elasticsearch 2.x的所有次要版本。



 类似资料:
  • 我遇到了一些实际的问题,比如使用字段增强来处理ElasticSearch。我已经看过关于这个主题的Nest文档,但它们没有特别大的帮助,所以我的代码实际上是基于这个问题的解决方案:使用Nest Field Boosting进行弹性搜索。 如果运行以下查询,我会得到一个结果,正如预期的那样: 然而,如果我尝试使用场增强,使用以下方法,我没有得到匹配: .OnFieldsWithBoost(d=>d.

  • 我如何告诉Panache查询的结果将是而不是? 谢谢你的回答 编辑:回购代码:

  • 问题内容: 我有一个运行中的elasticsearch的内存实例,并做了一些探索性的编码来学习搜索Java API。我能够将文档提交到索引并使用GET检索它们,但是当我尝试简单的搜索查询时,没有得到任何结果。 经过一些测试后,我认为问题出在我如何设置节点和关联的客户端(在内存中): 问题答案: Googleelasticsearch小组中的某个人很友好,可以在这里帮助我。将文档提交到内存节点后,我

  • 嗨,我是elasticsearch的新手,现在我索引了一个网站,我想用我的查询的单词获得文本摘录, 示例I索引 Lorem ipsum dolor sit amet,consectetur adipiscing Elit。Morbi nec odio在magna blandit porta quis a Nibh。整数sodales ex ut sagittis venenatis。Duis ef

  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 问题内容: 我在Elasticsearch中有一个小型数据库,出于测试目的,我想拉回所有记录。我正在尝试使用以下形式的网址… 有人可以给我您用来完成此操作的URL吗? 问题答案: 我认为支持lucene语法是这样的: 大小默认为10,因此您可能还需要获取10个以上的商品。(其中BIGNUMBER等于您认为大于数据集的数字) 但是,elasticsearch文档建议使用扫描搜索类型针对大型结果集。