抱歉,这个菜鸟问题,但是ElasticSearch查询可能会令人困惑...
目标:创建与Google搜索查询类似的查询。输入的单词越多,得到的匹配结果就越少。例如,“四川酱”比“木兰四川酱”产生更多的结果。
我的索引的博客文章类型为“标题”,“标签”,“类别”。 ElasticSearch必须找到与查询中所有单词匹配的每个文档。这些词可以散布在所有 Realm 。例如,如果文档的标题包含“花木兰”,其标签包含“szechuan”,其类别包含“sauce”,则这应该是一个匹配项,但是如果缺少一个单词则不能匹配。
我尝试了不同的 bool(boolean) 查询,但是即使我使用“必须”,结果也包含与所有查询词都不匹配的文档。
例如,我尝试过:
String queryString = "mulan szechuan sauce";
QueryBuilder titleMatchQuery = QueryBuilders.matchQuery("title", queryString);
QueryBuilder tagsMatchQuery = QueryBuilders.matchQuery("tags", queryString);
QueryBuilder categoryMatchQuery = QueryBuilders.matchQuery("categories", queryString);
QueryBuilder combinedBoolQuery = QueryBuilders.boolQuery()
.must(titleMatchQuery)
.must(tagsMatchQuery)
.must(categoryMatchQuery);
编译为:
{
"bool" : {
"must" : [ {
"match" : {
"title" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
}, {
"match" : {
"tags" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
}, {
"match" : {
"categories" : {
"query" : "mulan szechuan sauce",
"type" : "boolean"
}
}
} ]
}
}
如前所述,这还会产生不包含查询中所有单词的结果:-/
最佳答案
使用 multi_match
代替,您会很好:
String queryString = "mulan szechuan sauce";
QueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery(queryString,
"title", "tags", "categories");
QueryBuilder combinedBoolQuery = QueryBuilders.boolQuery()
.must(multiMatchQuery);
关于elasticsearch - 如何在ElasticSearch的多个字段中进行必须带有 bool 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114957/