我想知道是否有人在NEST中使用SearchBuilder API有任何提示或示例。文档仍然有点稀疏。
我希望根据URL参数中发送的条件动态构建查询/过滤器。一个例子:
www.mydomain.com/things/search?prop1=3&prop2=foo&prop3=bar
一旦我提取了那些,我想根据现有的标准建立一个完全匹配的查询。
答案 0 :(得分:3)
使用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
不为空或空,则仅查询州名查询。
答案 1 :(得分:0)
这就是我最终做到的方式:
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();
不确定这是最有效/最有效的方法,但它确实有效。