簡體   English   中英

如何在elasticsearch的bool查詢中放置多個匹配查詢

[英]How to put multiple match query inside a bool query in elasticsearch

我正在嘗試實現以下彈性搜索查詢

{
"query": {
    "bool": {
        "must": [
            {"match": {"collegeName": "XXXX"}},
            {"match": {"userType": "STUDENT"}},
            {"match": {"details.blocklisted":"TRUE"}}
            ]
    }
}

}

我如何在java中實現它。 我想過這樣做

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    searchSourceBuilder.query(boolQueryBuilder.must(new 
MatchQueryBuilder("collegeName",loggedInUserCollegeName)).must(new MatchQueryBuilder("userType",studentsSearchRequestDTO.getUserType())).must(new MatchQueryBuilder("details.blocklisted",studentsSearchRequestDTO.isBlockListed())));

有沒有更好的辦法???? 幫助!!

您可以使用MultiMatchQueryBuilder類的

SearchQuery searchQuery = new NativeSearchQueryBuilder()
              .withQuery(multiMatchQuery("college")
                .field("collegeName")
                .field("userType")
                .type(MultiMatchQueryBuilder.Type.BEST_FIELDS))
              .build();

是的,

使用搜索模板( ES 官方文檔)。 它就像一個存儲過程。 具有可替換變量的查詢。 另外,更改查詢只是一個簡單的更新。 預先創建模板(POST /_search/template/templateName {BODY})然后你可以調用它(POST /twitter/tweet/_search/templateName {BODY contains dynamic variables})。

同樣在JAVA中

Map<String, Object> params = new HashMap<String, Object>();
params.put("search_term", "elasticsearch");
params.put("since", "now-30d");

Template template = new Template("tweets", ScriptService.ScriptType.FILE, 
MustacheScriptEngineService.NAME, null, params);
SearchRequestBuilder request = 
client.prepareSearch(INDEX).setTemplate(template);

SearchResponse 響應 = request.execute().actionGet();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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