根据这个link , scan
和 count
都被弃用了。
我正在尝试更改我的查询以反射(reflect)这一点。所以 count
的改变很简单,只需删除搜索类型并在请求中添加 size=0
,但是,我不是 100% 在 scan
更改。
目前我有这个查询:
var result = ElasticClient.Search<Product>(s => s
.From(0)
.Size(10)
.SearchType(SearchType.Scan)
.Scroll("4s")
.Query
(qu =>
qu.Filtered
(fil =>
fil.Filter
(f =>
f.Bool(b => b.Must(m => m.Term("filedName", "abc")))))));
我的理解是否正确,我需要更改的只是删除 searchtype
并添加 sort
?即:
var result = ElasticClient.Search<Product>(s => s
.From(0)
.Size(10)
.Scroll("4s")
.Sort(x => x.OnField("_doc"))
.Query
(qu =>
qu.Filtered
(fil =>
fil.Filter
(f => f.Bool(b => b.Must(m => m.Term("filedName", "abc")))))));
我看到了枚举 SortSpecialField
here ,但我不确定如何在 sort
参数中实际使用它。
最佳答案
您的理解是正确的,即按 _doc
排序的更改(如您在问题中记录的那样)将替换已弃用的 Scan
搜索类型。 SortSpecialField
枚举只是按 _doc
排序的语法糖。如果您更喜欢使用它,在 NEST 2.0 [仅] 中,您可以这样做:
ElasticClient.Search<Product>(s => s
.From(0)
.Size(10)
.Scroll("4s")
.Sort(x => x.Ascending(SortSpecialField.DocumentIndexOrder))
...
关于Elasticsearch 2.1 - 弃用的搜索类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754518/