首页 > 解决方案 > 弹性搜索查询所有字段,包括嵌套字段

问题描述

我正在使用 ES 版本 5.6。我有一个类似下面的文档存储在 ES 中。

{
  "swType": "abc",
  "swVersion": "xyz",
  "interfaces": [
     {
        "autoneg": "enabled",
        "loopback": "disabled",
        "duplex": "enabled"
     },
     {
        "autoneg": "enabled",
        "loopback": "disabled",
        "duplex": "enabled"
     }
  ]
}

我想搜索所有已“启用”的字段。

我尝试了以下查询,但没有奏效。

curl -XGET "http://esserver:9200/comcast/inventory/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match":{
       "_all": "enabled"
     }
   }
}'



curl -XGET "http://esserver:9200/comcast/inventory/_search" -H 'Content-Type: application/json' -d'
        {
          "query": {
            "query_string": {
              "query": "enabled",
              "fields": ["*"]
            }
          }
        }'

但是下面的查询有效

curl -XGET "http://esserver:9200/comcast/inventory/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match":{
       "_all": "abc"
     }
   }
}'

因此,looks_all仅匹配顶级字段而不匹配嵌套字段。有什么方法可以查询所有字段中包含的文本,包括嵌套字段。我不想明确指定嵌套字段名称。我正在寻找一种全局搜索,我想在文档中的任何位置搜索“文本”。

谢谢。

标签: elasticsearch

解决方案


好的。得到它的工作。我已经设置了映射dynamic:false。看起来 ES 只会在映射中指定的字段中搜索,而我的搜索词在动态添加的字段中。

制作dynamic:'strict'帮助我缩小了问题的范围。


推荐阅读