簡體   English   中英

Elasticsearch查詢未產生預期結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM