Elasticsearch v6如何设置字段不可搜索但可检索?是否值得?
关于Elasticsearch v6中标记photo_path字段为不可搜索的解决方案
嘿,这当然可以实现,而且是非常合理的优化操作!针对你的需求,我来详细拆解一下:
1. 如何配置字段为不可搜索/不索引
你只需要在定义索引的mapping时,把photo_path字段的index属性设置为false即可。这样该字段就不会被构建倒排索引,无法被搜索到,但依然会被存储在_source中,查询时能正常返回。
给你一个v6版本的mapping示例:
PUT /products { "mappings": { "_doc": { "properties": { "title": { "type": "text" }, "description": { "type": "text" }, "price": { "type": "float" }, "photo_path": { "type": "keyword", "index": false } } } } }
这里把photo_path设为keyword类型(因为是路径字符串,不需要分词),再加上index: false就搞定了。
2. 这种做法是否可行?
完全可行!Elasticsearch从很早的版本就支持index: false这个配置,v6版本自然也没问题。只要你正确配置了mapping,后续索引文档时,photo_path不会被纳入索引逻辑;查询时,你依然可以在返回结果中拿到这个字段的值,但无论怎么搜都不会匹配到它。
3. 能节省存储或处理时间吗?
必须能!主要体现在两个方面:
- 存储节省:倒排索引是ES实现快速搜索的核心,当你设置
index: false后,ES不会为这个字段生成倒排索引数据,这部分存储空间就省下来了。虽然photo_path本身还是会存在_source里(如果你没禁用_source的话),但倒排索引的开销通常是不可忽视的,尤其是当你的产品文档量很大时,累计的节省效果会很明显。 - 处理效率提升:索引文档时,ES不需要对
photo_path做分词、索引构建等操作,能减少索引阶段的CPU和IO消耗,提升批量索引的速度;查询时,ES也不会在这个字段上做任何匹配、评分计算,避免了不必要的资源浪费。
额外提醒
如果之后你的需求发生变化,突然需要搜索photo_path字段了,那你得更新mapping把index改回true,然后重新索引所有文档——因为已经索引的文档不会自动为这个字段生成倒排索引。所以设置前最好确认这个字段的搜索需求是稳定的哦。
内容的提问来源于stack exchange,提问作者user9610034
相关产品推荐
相关产品推荐

