elasticsearch - 查询两个字段,一个嵌套,一个在根上

标签 elasticsearch

我正在尝试编写一个在两个不同字段中搜索字符串的查询。
一个来自根,一个作为嵌套对象的一部分。

我已经尝试过这两种方法,但都没有在两个领域产生匹配。

一个 query_string从根搜索

这导致 name 上的匹配只要

注意:如果我不指定字段,它将搜索所有字段,包括我想要的两个字段。

{
    "query": {
        "query_string": {
            "query": "searchterm",
            "fields": ["name", "project.projectName"]
        }
    }
}

一个 query_string搜索嵌套对象

这导致 project.projectName 上的匹配只要
{
    "query": {
        "nested": {
            "path": "project",
            "query": {
                "query_string": {
                    "query": "searchTerm",
                    "fields": [
                        "name",
                        "project.projectName"
                    ]
                }
            }
        }
    }
}

最佳答案

我认为您可以通过 bool query 实现这一目标

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "fields": [
              "name"
            ],
            "query": "searchTerm"
          }
        },
        {
          "nested": {
            "path": "project",
            "query": {
              "query_string": {
                "query": "searchTerm",
                "fields": [
                  "project.projectName"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

备注 - 如果您希望搜索词在两者上都匹配,您可以替换 shouldmust

关于elasticsearch - 查询两个字段,一个嵌套,一个在根上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33897834/

相关文章:

elasticsearch - Packetbeat无法分析发送的ICMP数据包

elasticsearch - master_not_discovered_exception ElasticSearch 单节点

c# - 使用 BulkAll 方法嵌套 5.5 重复项

Elasticsearch Reindex API 不起作用

linux - 当 redis 和 elasticsearch 等服务被多个其他服务使用时,您是否应该为它们创建单独的 docker 容器?

mysql - 连接Elasticsearch并删除mysql服务器

elasticsearch - Elasticsearch集群中节点之间的分片/数据分配

c# - Elasticsearch-嵌套-映射-多目标别名或仅指定每个文档要使用的1个多字段子字段

MySQL 查询花费了太多时间,NoSQL 是解决方案还是像 elasticsearch 这样的解决方案可以工作?

javascript - 如何在一个 grunt.registerTask 中调用多个 grunt.run.task?