4

我正在使用默认机制(不传递任何架构/结构)索引数据。我只是 XPOST JSON 文档。

我想使用:

  • 一个单一的索引
  • 各种类型,但不依赖于数据本身

我遇到的问题是我的 JSON 文档有一个特定的属性,它有时会递归地嵌套自己。当它发生时,ElasticSearch 在数据索引 PUT 操作上出错。

此类属性的内容对于我的搜索/索引目的并不重要。我知道我可以将它从数据中排除,但我仍然希望它像 NoSQL 解决方案一样存储。

例子:

{ prop1 :“某物”,dirty_prop :{ someprop :123 ,dirty_prop :{ .... } } }

从上面可以看出,有一个嵌套的包含,它将失败。

问题是:如何避免错误,保留数据。我 认为从索引中删除dirty_prop将允许它通过。什么是排除它的最简单方法,而不必提供完整的结构(我无法提供完整的结构/模式,因为我在数据中获得了新属性)。

4

1 回答 1

5

我会说拥有这样的 JSON 可能不是一个好主意,但是如果您确实拥有它并且无法做任何事情来修复它,您可以查看enabled可用于输入字段object的属性你的映射。看看这里了解更多。如果你说enabled: falsejson 的那个分支不会被解析也不会被索引,而是_source按照你的意愿保存在字段中。

另一方面,我不是 100% 确定这会起作用,这取决于你的 json 的损坏程度。当然,json 解析器(使用拉取方式)需要能够识别下一个对象并继续解析 json 的其他字段。

您提供完整的 json 结构这一事实使事情变得稍微复杂一些。您可以使用动态模板指定一个模式,该模式标识所有需要忽略的对象及其映射,指定enabled: false.

于 2013-07-19T08:42:41.517 回答