大家可能会遇到索引数据比较慢的过程. 其实明白索引的原理就可以有针对性的进行优化. ES 索引的过程到相对 Lucene 的索引过程多了分布式数据的扩展, 而这 ES 主要是用 tranlog 进行各节点之间的数据平衡. 所以从上我可以通过索引的 settings 进行第一优化:
"index.translog.flush_threshold_ops":"10000" "refresh_interval" : "1s"
这两个参数第一是到 translog 数据达到多少条进行平衡, 默认为 5000, 而这个过程相对而言是比较浪费时间和资源的. 所以我们可以将这个值调大一些还是设为 - 1 关闭, 进而手动进行 translog 平衡. 第二参数是刷新频率, 默认为 1s 是指索引在生命周期内定时刷新, 一但有数据进来能 refresh 像 lucene 里面 commit, 我们知道当数据 addDoucment 后, 还不能检索到要 commit 之后才能行数据的检索, 所以可以将其关闭, 在最初索引完后手动 refresh 之, 然后将索引 setting 里面的 index.refresh_interval 参数按需求进行修改, 从而可以提高索引过程效率.
另外的知道 ES 索引过程中如果有副本存在, 数据也会马上同步到副本中去. 我个人建议在索引过程中将副本数设为 0, 待索引完成后将副本数按需量改回来, 这样也可以提高索引效率.
"number_of_replicas": 0
其实检索速度快度与索引质量有很大的关系. 而索引质量的好坏主要与以下几方面有关:
分片数
分片数是与检索速度非常相关的的指标, 如果分片数过少或过多都会导致检索比较慢. 分片数过多会导致检索时打开比较多的文件别外也会导致多台服务器之间通讯. 而分片数过少会导致单个分片索引过大, 所以检索速度慢. 基于索引分片数 = 数据总量 / 单分片数的计算公式, 在确定分片数之前需要进行单服务单索引单分片的测试, 目前我们测试的结果单个分片的内容为 10G.
分片(Shard): 一个索引会分成多个分片存储, 分片数量在索引建立后不可更改, 推荐[分片数 * 副本数 = 集群数量]
确定分片 (shard) 的数量和副本 (replica) 的数量
Elasticsearch 在创建索引数据时, 最好指定相关的 shards 数量和 replicas, 否则会使用服务器中的默认配置参数 shards=5,replicas=1.
因为这两个属性的设置直接影响集群中索引和搜索操作的执行. 假设你有足够的机器来持有碎片和副本, 那么可以按如下规则设置这两个值:
1) 拥有更多的碎片可以提升索引执行能力, 并允许通过机器分发一个大型的索引;
2) 拥有更多的副本能够提升搜索执行能力以及集群能力.
对于一个索引来说, number_of_shards 只能设置一次, 而 number_of_replicas 可以使用索引更新设置 API 在任何时候被增加或者减少.
这两个配置参数在配置文件的配置如下:
index.number_of_shards: 5 number_of_replicas: 1
Elastic 官方文档建议: 一个 Node 中一个索引最好不要多于三个 shards. 配置 total_shards_per_node 参数, 限制每个 index 每个节点最多分配多少个发片.
副本数
副本数与索引的稳定性有比较大的关系, 如果 Node 在非正常挂了, 经常会导致分片丢失, 为了保证这些数据的完整性, 可以通过副本来解决这个问题. 建议在建完索引后在执行 Optimize 后, 马上将副本数调整过来.
分词
分词对于索引的影响可大可小, 看自己把握. 大家或许认为词库越多, 分词效果越好, 索引质量越好, 其实不然. 分词有很多算法, 大部分基于词表进行分词. 也就是说词表的大小决定索引大小. 所以分词与索引膨涨率有直接关系. 词表不应很多, 而对文档相关特征性较强的即可. 比如论文的数据进行建索引, 分词的词表与论文的特征越相似, 词表数量越小, 在保证查全查准的情况下, 索引的大小可以减少很多. 索引大小减少了, 那么检索速度也就提高了.
索引段
索引段即 lucene 中的 segments 概念, 我们知道 ES 索引过程中会 refresh 和 tranlog 也就是说我们在索引过程中 segments number 不只一个. 而 segments number 与检索是有直接联系的, segments number 越多检索越慢, 而将 segments numbers 有可能的情况下保证为 1, 这将可以提高将近一半的检索速度.
来源: http://www.bubuko.com/infodetail-2993385.html