作者:来自 Elastic Kofi Bartlett
说明如何配置 Elasticsearch 排除字段、为什么要这样做,以及应遵循的最佳实践。
更多阅读:Elasticsearch:inverted index,doc_values 及 source
想获得 Elastic 认证?了解下一次 Elasticsearch Engineer 培训的时间!
Elasticsearch 拥有大量新功能,可以帮助你为自己的使用场景构建最佳搜索解决方案。查看我们的示例笔记本以了解更多内容,开始免费云端试用,或立即在本地机器上尝试 Elastic。
在 Elasticsearch 中,索引是指以一种便于搜索的方式存储和组织数据的过程。虽然在某些情况下将文档中的所有字段建立索引是有用的,但有时你可能希望排除某些字段不被索引。这可以帮助提升性能、降低存储成本,并减少 Elasticsearch 索引的总体大小。
本文将讨论排除字段索引的原因、如何配置 Elasticsearch 排除特定字段,以及在这样做时应遵循的一些最佳实践。
排除字段索引的原因
性能:为文档中的所有字段建立索引会增加索引时间并降低搜索性能。通过排除不需要用于搜索或聚合的字段,可以提升 Elasticsearch 集群的整体性能。
存储:字段索引会占用存储空间。排除不需要用于搜索或聚合的字段,可以减少 Elasticsearch 集群的存储需求。
索引大小:Elasticsearch 索引的大小与被索引的字段数量直接相关。通过排除不必要的字段,可以最小化索引大小,从而加快搜索和索引的速度。
配置 Elasticsearch 排除字段
要在 Elasticsearch 中排除某个字段不被索引,可以在该字段的 mapping 中使用 index
属性。将 index
属性设置为 false
,Elasticsearch 将不会索引该字段,该字段也无法被搜索或用于聚合。
以下是使用 Elasticsearch mapping 排除字段索引的示例:
PUT /my_index
{
"mappings": {
"properties": {
"field_to_exclude": {
"type": "text",
"index": false
}
}
}
}
在这个示例中,我们创建了一个名为 “my_index” 的新索引,并包含一个名为 “field_to_exclude” 的字段。通过将 “index” 属性设置为 “false”,我们告诉 Elasticsearch 不对该字段建立索引。不过,该字段仍会保留在源文档中。
排除字段索引的最佳实践
分析你的数据:在排除字段索引之前,必须分析你的数据,并了解哪些字段对于搜索和聚合是必要的。这有助于你做出明智的排除决策。
测试你的更改:在排除字段索引时,必须测试你的更改,以确保搜索和聚合功能仍能正常工作。这可以帮助你避免意外问题或性能问题。
监控性能:排除字段索引后,监控 Elasticsearch 集群的性能,确保你的更改产生了预期的效果。这有助于你发现是否还需要其他优化。
使用 source filtering:如果你需要在 Elasticsearch 中存储某个字段,但不希望它可以搜索或用于聚合,可以考虑使用 source filtering。这样可以将字段保存在
_source
中,但不建立索引。
结论
在 Elasticsearch 中排除字段索引可以帮助提高性能、减少存储成本,并最小化索引的总体大小。通过仔细分析数据并了解哪些字段对于搜索和聚合是必要的,你可以做出明智的排除决策。始终测试更改并监控 Elasticsearch 集群的性能,以确保优化达到预期效果。
原文:Excluding Elasticsearch fields from indexing - Elasticsearch Labs