[英]Elasticsearch query doesn't produce expected result
我在創建查詢時遇到了麻煩,該查詢應該在標題和文本字段中搜索具有特定搜索詞的任何文檔,並且應該匹配一個狀態字段,該狀態字段可以是零個或多個必須匹配的值。
給定以下查詢:
"bool" : {
"must" : {
"multi_match" : {
"query" : "test",
"fields" : [ "title", "text" ]
}
},
"should" : {
"terms" : {
"state" : [ "NEW" ]
}
},
"minimum_should_match" : "1"
}
結果是否應返回以下數據?
{
"_shards": {
"failed": 0,
"successful": 5,
"total": 5
},
"hits": {
"hits": [
{
"_id": "JXnEkYFDQp2feATMzp2LTA",
"_index": "tips",
"_score": 1.0,
"_source": {
"state": "NEW",
"text": "This is a test",
"title": "Test"
},
"_type": "tip"
}
],
"max_score": 1.0,
"total": 1
},
"timed_out": false,
"took": 1
}
在我的測試中,情況並非如此。 我究竟做錯了什么?
以下是產生輸出查詢的Java代碼。
SearchRequestBuilder builder = client.prepareSearch("tips").setTypes("tip");
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if(searchTermIsNotEmpty(searchTerm)){
MultiMatchQueryBuilder qb = QueryBuilders.multiMatchQuery(
searchTerm,
"title", "text"
);
boolQuery.must(qb);
}
if(filters.size() > 0){
boolQuery.should(QueryBuilders.termsQuery("state",filters));
boolQuery.minimumNumberShouldMatch(1);
}
if(boolQuery.hasClauses()){
builder.setQuery(boolQuery);
}
logger.info(boolQuery.toString());
SearchResponse result = builder.execute().actionGet();
return result.toString();
在此方面的任何幫助將不勝感激!
似乎我找到了問題,由於某種原因,當我以原始形式使用過濾器枚舉時無法獲取。 我必須將枚舉轉換為字符串並將其小寫。
然后,我添加了以下查詢
boolQuery.must(QueryBuilders.termsQuery("state", getLowerCaseEnumCollection(filters)).minimumMatch(1));
我是Elasticsearch的新手,所以我不知道這是錯誤還是功能。 我只是很高興我知道了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.