【发布时间】:2017-10-22 05:38:09
【问题描述】:
很抱歉这个菜鸟问题,但 ElasticSearch 查询可能会令人困惑......
目标:创建一个类似于 Google 搜索查询的查询。您输入的单词越多,您获得的匹配结果就越少。例如,“四川酱”比“木兰四川酱”产生更多的结果。 我的索引有一个博客文章类型,其中包含“标题”、“标签”、“类别”等字段。 ElasticSearch 必须找到与查询中的所有单词匹配的每个文档。这些词可以遍布所有领域。例如,如果一个文档的标题包含“mulan”,其标签包含“szechuan”,其类别包含“sauce”,那么这应该是匹配的,但如果缺少一个单词则不是。
我尝试了不同的布尔查询,但即使我使用“必须”,结果也会包含与所有查询词都不匹配的文档。
例如我试过:
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"
}
}
} ]
}
}
如前所述,这也会产生不包含查询中所有单词的结果:-/
【问题讨论】:
标签: elasticsearch