当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch中无映射类型的嵌套文档

容飞掣
2023-03-14

随着ElasticSearch计划删除映射类型,这是否也意味着不再使用嵌套文档和嵌套查询?ElasticSearch将如何支持无类型上下文中的嵌套对象查询?

我正在考虑的功能是能够只返回匹配搜索条件的嵌套数组中的命中。

编辑1:ElasticSearch版本6中的映射查询示例

ElasticSearch 6映射

{
    "rec": {
        "mappings": {
            "history": {
                "properties": {
                    "dateCompleted": {
                        "type": "keyword"
                    },
                    "dateCreated": {
                        "type": "keyword"
                    },
                    "dateOrdered": {
                        "type": "keyword"
                    },
                    "dateToArrive": {
                        "type": "keyword"
                    },
                    "details": {
                        "type": "nested",
                        "properties": {

                            "clientId": {
                                "type": "keyword"
                            },
                            "company": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            },
                            "orderNumber": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

ElasticSearch 6查询

{
  "from": 0,
  "query": {
    "nested": {
      "inner_hits": {},
      "path": "details",
      "query": {
        "bool": {
          "must": [
            {
              "match_phrase": {
                "details.company.keyword": {
                  "query": "ABCD"
                }
              }
            }
          ]
        }
      }
    }
  },
  "size": 10,
  "sort": [],
  "_source": false
}

共有2个答案

左丘昊天
2023-03-14

在版本7中,NEST客户端上的GetMap方法似乎已移动到IElasticSearchClient。表示。代码映射。我的误解是所有类型都被删除了。实际上,计划似乎是每个索引只有一种类型。感谢@ibexout的澄清。

澹台华采
2023-03-14

不,删除_type对嵌套文档和查询没有影响。

过去,人们在一个索引中使用不同的类型来建模多个实体。问题是,一些实体具有相同的字段,但字段类型不同。例如“版本”,在一个实体中是字符串,但在其他实体中是整数。这引起了一个问题,因为没有解决方案。

编辑:嵌套对象是一种映射数据类型,用于对文档中的复杂特性进行建模,如下所示:

{
  "_id" : "12345",
  "user" : { "login":"foo", "email":"foo@example.com"}
}

请注意文档本身中的用户对象或上面映射中的“details”属性。此处提供了更多示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

文档doctype是一组通过映射定义文档结构的属性。

过去,有可能使用两个doctype在一个索引中建模“汽车”和“飞机”。在当前版本中,只有一个doctype,主要名为_doc,它将在未来的版本中完全删除。

在您链接的文档(删除类型)中,有一个很好的例子,即多doctype twitter索引在一个索引中定义用户和tweet doctype。

 类似资料:
  • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。

  • 问题内容: 我正在尝试为如下对象创建动态映射: 我希望属性为嵌套类型,该类型是我在下面的映射中使用nested_feature模板定义的,并且按预期工作。但是,我也想让属性的嵌套对象中的每个属性都带有定义的其他属性。我尝试了第二个nested_template模板,但没有成功。 不幸的是,属性中的属性是从另一个进程创建的,几乎可以是任何名称/值对。关于如何使用动态模板将属性设置为嵌套的任何建议,以

  • 我试图为对象创建一个动态映射,如下所示:

  • 我必须使用elasticsearch和python为需要索引的json数据创建索引。例如,我有一个嵌套数组[[39.909971141540645,1452077285.150548,1452077286.196072,1.0455241203308105]]我需要为这个数组定义一个映射,比如第一个字段是count,第二个字段是start_time,end_time,duration。请帮助说明如

  • 问题内容: 我正在编写资产管理应用程序。它允许用户通过向资产添加html控件(例如文本字段,选择菜单等)来存储任意资产属性。然后,该属性的JSON表示成为存储在beddb中的资产JSON文档的一部分。资产在ouchdb中具有以下结构: 我不确定将属性放入数组是否是允许基于属性值搜索资产的最佳方法。将属性直接附加到资产作为属性会更好吗?我正在用Elasticsearch做实验。如果我尝试按原样存储文

  • 我不知道如何在Java类中处理嵌套的JSON值。为了尽可能简单,我创建了四个Java类,每个类都有“嵌套级别”。然而,我试图在一个Java类中包含所有这些值。我该怎么做? Json: Java类: