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

gex*_*tra 4 elasticsearch

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

我想用:

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

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

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

例:

{prop1:"something",dirty_prop:{someprop:123,dirty_prop:{....}}}

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

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

jav*_*nna 5

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

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

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