【问题标题】:Multiple values in QueryString query using elasticsearch NEST使用 elasticsearch NEST 查询字符串中的多个值
【发布时间】:2014-10-19 05:52:06
【问题描述】:

我需要使用 NEST 客户端从 ES 获取文档,在单个字段上具有多个类似条件。

我的查询如下:

SELECT * FROM Customer WHERE CustomerName LIKE '%john%' OR CustomerName Like '%george%'

我的弹性搜索 NEST 查询(对于单个类似操作)如下:

var customers= ElasticSearchHelper.ElasticClient.SearchAsync<Customer>(body => body
                .Take(100000)
                .Filter(f => f
                    .And
                    (
                       fs=> fs.Query(q=> .QueryString(qs => qs
                                .Query("*" + SearchText + "*")
                                .OnField(new string[] { "FirstName"})
                                .DefaultOperator(Operator.or)
                                .MinimumShouldMatchPercentage(100)
                                .AnalyzeWildcard(true)))
                    )));
            return customers.Documents;

如何在单个字段上进行多次类似操作?请指导我做错了什么。

【问题讨论】:

    标签: elasticsearch nest elasticsearch-net


    【解决方案1】:

    您需要使用的是 OR 过滤器与 Regex 过滤器的组合:

    SearchDescriptor<T> searchDescriptor = new SearchDescriptor<T>();
    FilterDescriptor<T> filterDescriptor = new FilterDescriptor<T>();
    
    FilterContainer filterContainer1 = new FilterContainer();
    filterContainer1 = filterDescriptor.Regexp(rg => 
                        rg.OnField("CustomerName").Value(".*" + "john" + ".*"));
    
    FilterContainer filterContainer2 = new FilterContainer();
    filterContainer2 = filterDescriptor.Regexp(rg => 
                        rg.OnField("CustomerName").Value(".*" + "george" + ".*"));
    
    searchDescriptor.Filter(flt => 
                flt.Or(filterContainer1, filterContainer2));
    
    var resulet = this.ElasticClient().Search<T>(body => searchDescriptor);
    

    将产生以下查询(T 是您的文档的类型):

      {
          "filter": {
            "or": {
              "filters": [
                {
                  "regexp": {
                    "CustomerName": {
                      "value": ".*john.*"
                    }
                  }
                },
                {
                  "regexp": {
                    "CustomerName": {
                      "value": ".*doe.*"
                    }
                  }
                }
              ]
            }
          }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多