这是我早期版本的ES中的代码。搬到ES 5.5后。它已停止工作,它给出了编译器错误。
错误:'QueryStringQueryDescriptor'不包含'OnFields'的定义,也没有扩展方法'OnFields'接受类型为'QueryStringQueryDescriptor'的第一个参数
以下是我的代码段...
public List<EmployeeInfo> SearchText2(string query, List<string> sendersList, int page = 0, int pageSize = 50)
{
try
{
var result = this.client.Search<EmployeeInfo>(s => s
.From(page * pageSize)
.Size(int.MaxValue)
.Query(q => q
.QueryString(qs => qs.Query(query).UseDisMax()
.OnFields(b => b.Subject)
.OnFields(b => b.Body)
))
.SortDescending(f => f.ReceivedTime)
.Filter(f => f.Terms(ak => ak.SenderName, sendersList))
);
...
// Some code here
}
有关如何完成这项工作的任何提示都会很棒。
答案 0 :(得分:2)
在Nest
库的最新版本中,存在一些API更改
而不是OnFields
中的QueryString
,您应该使用Fields
QueryString(qs => qs.Query(string.Empty).UseDisMax()
.Fields(descriptor => descriptor.Fields(b => b.Subject, b => b.Body))
))
您应使用SortDescending
Sort
.Sort(descriptor => descriptor.Field(f => f.ReceivedTime, SortOrder.Descending))
此外,过滤器在版本5开始的弹性搜索中不可用,您应该使用带过滤器的bool查询
Query(descriptor =>
descriptor.Bool(boolQuery =>
boolQuery
.Must(query => query.MatchAll())
.Filter(f => f.Terms(ak => ak.SenderName, sendersList)
)
)
)