【发布时间】:2016-10-21 16:52:15
【问题描述】:
我是第一次使用弹性搜索,根据要求我对滚动有一些疑问和问题
检索满足所有搜索条件的所有数据 1)我正在尝试使用滚动,但我在搜索时发现 https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_21_search_changes.html 我发现不推荐使用搜索类型扫描 但 NEST 支持它 那么我应该使用“搜索类型扫描”还是“按文档排序”? (我使用的是弹性搜索 2.4)
2)我可以在使用滚动时使用“在任何字段上排序”吗?
3) 在进行清除滚动时 var test2 = client.ClearScroll(x=>x.ScrollId(results.ScrollId));
得到如下错误: 无效的 NEST 响应构建于对 DELETE 的不成功的低级别调用:/_search/scroll
此 API 调用的审计跟踪:
-
[1] 错误响应:节点:http://mydomain@localhost:9200/ 接受:00:00:00.0160110
OriginalException: System.Net.WebException: 远程服务器返回错误:(404) Not Found。
在 System.Net.HttpWebRequest.GetResponse() 在 Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) 在 C:\Users\russ\source\elasticsearch-net-2.x\src\Elasticsearch.Net\Connection\HttpConnection.cs:line 141
请求:
{"scroll_id":["c2NhbjswOzE7dG90YWxfaGl0czoxMjs="]}
回应:
{}
那么清除滚动的方法是否正确?
更新::下面是我的代码:
List<Object> indexedList = new List<Object>();
ISearchResponse<ListingSearch> listingResult =
client.Search<ListingSearch>(search => search
.Index(Constant.ES_INDEX)
.Type(Constant.ES_TYPE)
.From(listingSearch.StartIndex)
.Size(10)
.Source(s => s.Include(i => i.Fields(outpputFields)))
.Query(query => query.
Bool(boolean => boolean.
Must(
must => must.Term(t => t.Field("is_deleted").Value(false))
)
.Sort(x => x.Field("_doc", SortOrder.Ascending))
.Scroll("60s")
);
List<Object> indexedList = new List<Object>();
var results = client.Scroll<ListingSearch>("60s", listingResult.ScrollId);
while (results.Documents.Any())
{
foreach (var doc in results.Hits)
{
indexedList.Add(doc);
}
results = client.Scroll<ListingSearch>("60s", results.ScrollId);
}
var test2 = client.ClearScroll(x=>x.ScrollId(results.ScrollId));
//清除滚动
通过上面的代码,我正在获取数据 但如果我将大小从 10 更改为 1000,则没有记录。 不确定问题是否出在数据量上,因为我的 ES 数据库只有 12-15 个文档。
【问题讨论】:
标签: sorting elasticsearch scroll nest