我想知道是否有人在NEST中使用SearchBuilder API的任何提示或示例。文檔仍然有點稀疏。在NEST中使用SearchBuilder ElasticSearch客戶端
我期待根據URL參數中發送的條件動態構建查詢/過濾器。舉個例子:
www.mydomain.com/things/search?prop1=3 & PROP2 = foo的& prop3 =酒吧
一旦我提取那些我想基於標準建立一個精確匹配查詢那是存在的。
我想知道是否有人在NEST中使用SearchBuilder API的任何提示或示例。文檔仍然有點稀疏。在NEST中使用SearchBuilder ElasticSearch客戶端
我期待根據URL參數中發送的條件動態構建查詢/過濾器。舉個例子:
www.mydomain.com/things/search?prop1=3 & PROP2 = foo的& prop3 =酒吧
一旦我提取那些我想基於標準建立一個精確匹配查詢那是存在的。
這是我最後只是:
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();
不知道這是做最有效的/有效的方式,但它的作品。
使用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
保留一個值並且只有狀態項查詢if state
不爲空或空,則這將只顯示城市查詢。
真棒....感謝Martijn! – Cork