【问题标题】:How to properly define a hashmap in ElasticSearch如何在 ElasticSearch 中正确定义哈希图
【发布时间】:2016-08-25 17:54:23
【问题描述】:

我在 ElasticSearch 中使用动态映射。

我使用它是因为我的索引很长,并且我需要使用模板功能以避免在多个地方更新定义 (see my other SO question)。

我正在发送以下 json (Object Zoo),其中 包含一个 HashMap 作为示例:

Put 127.0.0.1:9200/myIndex/Zoo/10
{
  "id" : 1,
  "Name" : "Madagascar",
  "map" : {
    "1" : {
      "id" : -4944060986111146989,
      "name" : null
    },
    "2" : {
      "id" : 5073063561743125202,
      "name" : null
    },
    "3" : {
      "id" : -1777985506870671559,
      "name" : null
    }
  }
}

这将创建以下索引

{
    "mm3_v2": {
        "mappings": {
            "Zoo": {
                "properties": {
                    "Name": {
                        "type": "string"
                    },
                    "id": {
                        "type": "long"
                    },
                    "map": {
                        "properties": {
                            "1": {
                                "properties": {
                                    "id": {
                                        "type": "long"
                                    }
                                }
                            },
                            "2": {
                                "properties": {
                                    "id": {
                                        "type": "long"
                                    }
                                }
                            },
                            "3": {
                                "properties": {
                                    "id": {
                                        "type": "long"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

在此示例中,哈希图中的内部对象很短。
在现实生活中,我的 hashmap 对象可能很长。

这可以创建一个巨大的索引文件(很容易 1M 行)并且对于每个对象它重复完全相同的定义。
(例如,当存储在列表中时,映射不会重复)

有没有办法在弹性搜索中正确定义哈希图?

【问题讨论】:

  • 你找到解决办法了吗?
  • 不。改为使用列表。

标签: templates elasticsearch hashmap mapping


【解决方案1】:

有没有办法在弹性搜索中正确定义哈希图?

在处理对象方面,Elasticsearch 有Object TypeNested Type。嵌套对象被视为单独的文档,文档为理解优点(和缺点)提供了很好的示例。

我认为Elasticsearch's dynamic templates 对于您的情况可能值得探索,如果您想微调如何处理新的键值对添加,尽管您确实提到嵌套对象具有严格的定义?

这可以创建一个巨大的索引文件(很容易 1M 行)并且为每个 对象它重复完全相同的定义。 (例如,当存储在 列表,映射不会重复)

您指的是将要创建的大型映射吗?正如您所提到的,使用 Array 类型可以避免这种情况,因此是否可以更改地图对象的结构来避免这种情况?还是map键没有1、2、3、...那么简单?

【讨论】:

  • 如何使用它来定义一个 hashmap 映射?如何取消 hashmap 的自动映射并用有效的短映射覆盖它?
  • 如果这不是最佳答案,我深表歉意,因为我仍在努力了解您的要求。由于 StackOverflow 规则,我不能简单地评论原始帖子,但我确实修改了我之前的答案。至于如何使用它来定义地图映射,我认为 Object 和 Nested 类型的文档应该会有所帮助。此外,stackoverflow.com/questions/20401709/… 可能有助于了解如何利用具有对象或嵌套类型的动态模板。
【解决方案2】:

如果您不查询该字段,则可以在该字段的映射中设置 "enabled": false

  "map": {
    "type": "object",
    "enabled": false
  }

【讨论】:

  • 如果只需要保留数据,我认为这是最好的方法。
  • 查询的人呢?
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多