首页 > 解决方案 > NEST (ElasticSearch) 的动态布尔查询

问题描述

再会:

我正在尝试实现动态布尔查询。例子...

        QueryContainer addressQuery = null;
        QueryContainer typeQuery = null;

        BoolQueryDescriptor <Facility> boolQuery = new BoolQueryDescriptor<Facility>();
        QueryContainerDescriptor<Facility> sh = new QueryContainerDescriptor<Facility>();
        SearchDescriptor<Facility> mainSh = new SearchDescriptor<Facility>();
        if (search.searchTerm != null)
        {
            addressQuery = sh.Term(f => f.Address, search.searchTerm) ||
                                            sh.Match(m => m.Field(f => f.Address).Query(search.searchTerm) ) ||
                                            sh.Term(f => f.ZipCode, search.searchTerm) ||
                                            sh.Match(m => m.Field(f => f.State).Query(search.searchTerm));
            boolQuery = boolQuery.Should(b => addressQuery);
        }
        if (search.type != null) {
            typeQuery = sh.Term(f => f.Types.First(), search.type);
            boolQuery = boolQuery.Must(b => typeQuery && addressQuery);
        }

        if (boolQuery != null)
        {
           mainSh = mainSh.Query(q => q.Bool(b => boolQuery));
           request = await this._elasticClient.SearchAsync<Facility>(s => mainSh.Size(search.size));
        }

这个查询正在变成一个 OR AddressQueryTypeQuery但是,我想在两个查询之间实现一个And条件。有效地使查询动态化。这可能吗?示例:动态addressQuery && typeQuery

谢谢。

标签: elasticsearchnest

解决方案


将其解雇..您可以&&||查询容器...分类器,例如:

 queryContainer1=queryContainer1 && queryContainer2

然后.bool(b => b(queryContainer1))


推荐阅读