Elasticsearch嵌套数据类型 - 嵌套对象在原始文档中是否仍然可见?

时间:2017-05-29 22:37:10

标签: elasticsearch

在阅读嵌套数据类型时,他们说每个嵌套对象都保存为“单独的隐藏文档”。当我将fieldName1创建为嵌套类型时,这是否意味着什么?以下搜索将不再有效?

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "type": {
            "value": "typeName"
          }
        },
        {
          "match": {
            "fieldName1.@description": "keyword"
          }
        },
        {
          "match": {
            "fieldName1.#text": "foo"
          }
        }
      ]
    }
  }
}

目前,我有一个数据库,但没有嵌套类型,我想包括fieldName1的嵌套部分,以优化特定搜索“foo”作为关键字,但我不想失去我目前的功能。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

修改fieldName1nested的映射后,您的查询需要更改为使用不同的语法:

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "type": {
            "value": "typeName"
          }
        },
        {
          "nested": {
            "path": "fieldName1",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "fieldName1.@description": "keyword"
                    }
                  },
                  {
                    "match": {
                      "fieldName1.#text": "foo"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

将返回的源文档仍将包含嵌套的fieldName1数据。