【问题标题】:ElasticSearch C# client (NEST): Filtering results with ES 5.5.0ElasticSearch C# 客户端 (NEST):使用 ES 5.5.0 过滤结果
【发布时间】:2017-10-07 17:12:07
【问题描述】:

这是我在早期版本的 ES 中使用的代码。迁移到 ES 5.5 之后。它已停止工作并给出编译器错误。

错误:“QueryStringQueryDescriptor”不包含“OnFields”的定义,并且没有扩展方法“OnFields”接受“QueryStringQueryDescriptor”类型的第一个参数

下面是我的代码 sn-p...

    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

        }

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

【问题讨论】:

    标签: elasticsearch filtering nest


    【解决方案1】:

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

    1. 你应该使用Fields而不是OnFields中的OnFields

      QueryString(qs => qs.Query(string.Empty).UseDisMax()
          .Fields(descriptor => descriptor.Fields(b => b.Subject, b => b.Body))
      ))
      
    2. 你应该使用Sort而不是SortDescending

      .Sort(descriptor => descriptor.Field(f => f.ReceivedTime, SortOrder.Descending))
      
    3. 从版本 5 开始,elasticsearch 中也没有过滤器,您应该使用带有过滤器的 bool 查询

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

    【讨论】:

    • var 结果 = this.client.Search(a => a .Type(IndexName) .Size(int.MaxValue) .Query(q => q .QueryString(qs => qs .Query(string.Empty).UseDisMax() .Fields(ft => ft.Fields(b => b.City, b => b.State, b => b.Zip)))) .Bool(blQuery = > blQuery .Must(query1 => query1.MatchAll()) .Filter(f => f.Term(ak => ak.Field(b => b.City).Value(sendersList))))));错误 CS1061:“SearchDescriptor”不包含“Bool”的定义,并且找不到接受“SearchDescriptor”类型的第一个参数的扩展方法“Bool”
    • 仍然报错。请需要帮助。错误 CS1061:“SearchDescriptor”不包含“Bool”的定义,并且找不到接受“SearchDescriptor”类型的第一个参数的扩展方法“Bool”
    • 你用的是什么版本的nest客户端?
    • ES 是 5.5.0,Nest 是 5.3.1
    猜你喜欢
    • 2018-03-01
    • 2013-03-31
    • 2015-03-21
    • 2023-03-30
    • 2017-12-22
    • 2015-02-19
    • 2012-09-23
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多