ElasticSearch C#客户端(NEST):使用ES 5.5.0过滤结果

时间:2017-09-27 14:45:34

标签: elasticsearch filtering nest

这是我早期版本的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

        }

有关如何完成这项工作的任何提示都会很棒。

1 个答案:

答案 0 :(得分:2)

Nest库的最新版本中,存在一些API更改

  1. 而不是OnFields中的QueryString,您应该使用Fields

    QueryString(qs => qs.Query(string.Empty).UseDisMax()
        .Fields(descriptor => descriptor.Fields(b => b.Subject, b => b.Body))
    ))
    
  2. 您应使用SortDescending

    而不是Sort
    .Sort(descriptor => descriptor.Field(f => f.ReceivedTime, SortOrder.Descending))
    
  3. 此外,过滤器在版本5开始的弹性搜索中不可用,您应该使用带过滤器的bool查询

    Query(descriptor => 
        descriptor.Bool(boolQuery => 
            boolQuery
                .Must(query => query.MatchAll())
                .Filter(f => f.Terms(ak => ak.SenderName, sendersList)
            )
        )
    )