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