我使用默认机制索引数据(不传递任何架构/结构)。我只是XPOST JSON文档。
我想用:
我遇到的问题是我的JSON文档有一个特定的属性,有时会递归地嵌套自己。当它这样做时,ElasticSearch会对数据索引PUT操作产生错误。
此类属性的内容对于我的搜索/索引目的并不重要。我知道我可以从数据中排除它,但我仍然希望它像NoSQL解决方案一样存储。
示例:
{ prop1:“东西”, dirty_prop:{someprop:123,dirty_prop:{....}} }
从上面可以看出,有一个嵌套的包含,它将失败。
问题是:如何避免错误,保留数据。我推测从索引中删除 dirty_prop 将允许它通过。排除它的最简单方法是什么,而不必提供完整的结构(我无法提供完整的结构/模式,因为我在数据中获得了新属性)。
答案 0 :(得分:5)
我会说拥有这样的JSON可能不是一个好主意,但是如果你确实拥有它并且无法做任何事情来修复它,你可以看一下enabled
属性您可以在映射中使用object
类型的字段。看看here了解更多信息。如果你说enabled: false
json的分支将不会被解析或索引,而是保存在_source
字段中。
另一方面,我不是百分百肯定这会起作用,这取决于你的json是多么破碎。当然,json解析器(使用pull方法)需要能够识别下一个对象并继续解析json的其他字段。
您提供json的完整结构这一事实使事情稍微复杂一些。您可以使用dynamic templates指定一个模式,该模式标识需要忽略的所有对象及其映射,指定enabled: false
。