如何在Elasticsearch 5.6中设置嵌套字段不可搜索?
让Elasticsearch嵌套字段不可搜索的几种有效方法
嘿,我猜你可能踩了include_in_all的坑——这个参数在Elasticsearch 6.0之后就被弃用,7.0版本直接移除了,所以设置它根本不会起到让字段不可搜索的作用。下面给你几个靠谱的替代方案:
使用
index: false(最推荐)
这是控制字段是否可搜索的标准方式,设置后该字段不会被构建倒排索引,自然无法被搜索到,同时还会保留字段在_source中的内容(如果需要查看原始数据的话)。对于嵌套字段,你可以这样配置映射:{ "mappings": { "properties": { "你的父字段": { "type": "object", "properties": { "要设为不可搜索的嵌套字段": { "type": "text", // 或者你的字段类型,比如keyword、integer等 "index": false } } } } } }使用
enabled: false(适合不需要解析的字段)
如果这个嵌套字段你只是想原样存在_source里,完全不需要Elasticsearch解析它的内容,那可以用这个参数。设置后,Elasticsearch不会对该字段做任何处理,既不索引也不存储解析后的字段内容,只保留原始JSON在_source中。注意这个参数只适用于object类型的字段:{ "mappings": { "properties": { "你的父字段": { "type": "object", "properties": { "要设为不可搜索的嵌套字段": { "type": "object", "enabled": false } } } } } }
注意事项
如果你的索引已经创建并包含数据,修改这些映射参数后,需要重新索引现有数据才能让设置生效——因为Elasticsearch无法修改已存在字段的索引属性,只能通过重建索引来应用新的映射规则。
内容的提问来源于stack exchange,提问作者arjunsv3691
相关产品推荐
相关产品推荐

