Elasticsearch查询嵌套对象

阿伦·S

我有弹性记录:

{
    "FirstName": "Winona",
    "LastName": "Ryder",
    "Notes": "<p>she is an actress</p>",
    "Age": "40-50",
    "Race": "Caucasian",
    "Gender": "Female",
    "HeightApproximation": "No",
    "Armed": false,
    "AgeCategory": "Adult",
    "ContactInfo": [
        {
            "ContactPoint": "[email protected]",
            "ContactType": "Email",
            "Details": "Details of tv show",
        }
    ]
}

我想在联系信息对象中进行查询,并且使用了以下查询,但没有得到任何结果:

{
    "query": {
        "nested" : {
            "path" : "ContactInfo",
            "query" : {
                "match" : {"ContactInfo.Details" : "Details of tv show"}
            }
        }
    }
}

我也尝试过:

{
   "query": {
     "term" : { "ContactInfo.ContactType" : "email" } 
   }
}

这是联系信息的映射:

"ContactInfo":{
    "type": "object"
}

我想我知道问题是字段未设置为映射中的嵌套,有没有一种方法可以在不更改映射的情况下仍然查询嵌套,我只是想避免在可能的情况下重新索引数据。我是弹性搜索的新手,因此需要您的帮助。

提前致谢。

ESCoder

Elasticsearch没有内部对象的概念。

Elasticsearch官方文档中有关嵌套字段类型的一些要点

  1. 嵌套类型是对象数据类型的专门版本,它允许以可以彼此独立地查询对象的方式对对象数组进行索引。
  2. 如果需要索引对象数组并保持数组中每个对象的独立性,请使用嵌套数据类型而不是对象数据类型。
  3. 在内部,嵌套对象将数组中的每个对象作为单独的隐藏文档编制索引,以便可以通过嵌套查询独立地查询每个嵌套对象。

请参阅此SO答案,以获得有关此的更多详细信息

添加带有索引映射,搜索查询和搜索结果的工作示例

应用嵌套数据类型后,您必须重新索引数据

索引映射:

{
  "mappings": {
    "properties": {
      "ContactInfo": {
        "type": "nested"
      }
    }
  }
}

搜索查询:

{
    "query": {
        "nested" : {
            "path" : "ContactInfo",
            "query" : {
                "match" : {"ContactInfo.Details" : "Details of tv show"}
            }
        }
    }
}

搜索结果:

"hits": [
      {
        "_index": "stof_64269180",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.1507283,
        "_source": {
          "FirstName": "Winona",
          "LastName": "Ryder",
          "Notes": "<p>she is an actress</p>",
          "Age": "40-50",
          "Race": "Caucasian",
          "Gender": "Female",
          "HeightApproximation": "No",
          "Armed": false,
          "AgeCategory": "Adult",
          "ContactInfo": [
            {
              "ContactPoint": "[email protected]",
              "ContactType": "Email",
              "Details": "Details of tv show"
            }
          ]
        }
      }
    ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章