elasticsearch - 如何在ElasticSearch的多个字段中进行必须带有 bool 查询?

标签 elasticsearch

抱歉,这个菜鸟问题,但是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/

相关文章:

python - Django DRF elastic search dsl,基于另一个字段数值应用功能增强

lucene - 如何在 elasticsearch 中使用 query_string 语法搜索这组字段

c# - 如何获取Elasticsearch NEST响应的聚合类属性?

elasticsearch - Elasticsearch 中结合范围和脚本过滤器

elasticsearch - Elasticsearch索引搜索模板在数组中生成空字符串

elasticsearch - 获取所有存储桶以进行汇总 Elasticsearch

python - 使用elasticsearch python包时读取超时错误

elasticsearch - Elastic Canvas 日期格式

sql - 高效计算 SQL 中的重要术语

amazon-web-services - AWS-不允许跨帐户目标角色