【问题标题】:Usage of SearchBuilder in NEST ElasticSearch clientNEST ElasticSearch 客户端中 SearchBuilder 的使用
【发布时间】:2012-09-23 18:31:56
【问题描述】:

我想知道是否有人对在 NEST 中使用 SearchBuilder API 有任何提示或示例。文档仍然很少。

我希望根据 URL 参数中发送的标准动态构建查询/过滤器。一个例子:

www.mydomain.com/things/search?prop1=3&prop2=foo&prop3=bar

一旦我提取了那些,我想根据现有的条件构建一个完全匹配的查询。

【问题讨论】:

    标签: .net elasticsearch nest


    【解决方案1】:

    使用 DSL 查询语法,您现在可以简单地执行以下操作:

    var results = client.Search(s=>s
        .Fields(new string[0])
        .Query(q=>
            q.Term(ESFields.City, city)
            && q.Term(ESFields.State, state)
        )
    );
    

    这依赖于 0.9.10.0 中添加的 conditionless query 支持。

    这将仅在 city 持有值时呈现城市查询,如果 state 不为 null 或为空,则仅呈现州术语查询。

    • 如果两者都有效,它将执行布尔查询
    • 如果只有一个是有效的,它将只做一个词查询
    • 如果两者都无效,它将退回到 match_all 查询。

    【讨论】:

      【解决方案2】:

      这就是我最终这样做的方式:

        var boolQuery = QueryFactory.BoolQuery();
        if (!String.IsNullOrEmpty(city)) { boolQuery.Must(QueryFactory.TermQuery(ESFields.City, city)); }
        if (!String.IsNullOrEmpty(state)) { boolQuery.Must(QueryFactory.TermQuery(ESFields.State, state)); }
        //etc. for many fields
      
        var sb = SearchBuilder.Builder();
        //I want no actual data - this will ensure I only get IDs
        sb.Fields(new string[0]);
        sb.Query(boolQuery);
      
        var companyIds = ((ElasticClient)_elasticClient).Search(sb, ESIndexes.Client, ESIndexTypes.Client, tenantId)
          .DocumentsWithMetaData.Select(d => d.Id).ToList();
      

      不确定这是最有效/最有效的方法,但它确实有效。

      【讨论】:

        猜你喜欢
        • 2017-12-22
        • 2015-02-19
        • 1970-01-01
        • 2020-12-22
        • 2014-06-23
        • 2015-04-24
        • 1970-01-01
        • 2013-03-31
        • 2016-07-27
        相关资源
        最近更新 更多