如何禁用要在ElasticSearch中编制索引的属性

时间:2013-07-19 01:34:02

标签: elasticsearch

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

我想用:

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

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

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

示例:

{   prop1:“东西”,   dirty_prop:{someprop:123,dirty_prop:{....}} }

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

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

1 个答案:

答案 0 :(得分:5)

我会说拥有这样的JSON可能不是一个好主意,但是如果你确实拥有它并且无法做任何事情来修复它,你可以看一下enabled属性您可以在映射中使用object类型的字段。看看here了解更多信息。如果你说enabled: false json的分支将不会被解析或索引,而是保存在_source字段中。

另一方面,我不是百分百肯定这会起作用,这取决于你的json是多么破碎。当然,json解析器(使用pull方法)需要能够识别下一个对象并继续解析json的其他字段。

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