ElasticSearch使用规范-查询规范
查询规范建议
1)定义好mappings和settings,不同的数据类型查询效率不一样,建议只需做精确查询以及范围查询的字段设置为keyword类型。对于要进行全文检索的字段设置合理的分词器。
2)对于只需要查询数据结果而不需要结果的相关度计算的情况,使用filter query能大幅提升你的查询效率。例如过滤某车牌和号码。
3)避免一次性取出大量的数量:Elasticsearch被设计为一个搜索引擎,这使得它非常擅长获取与查询匹配的最优文档,但是不适合用来检索与特定查询匹配的所有文档。 Elasticsearch为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,如果需要这样做,请确保使用Scroll API。
4)尽量细化查询条件,查询的条件越细,查询效率越高。
5)选择合适的查询类型,比如term查询效率相对会高一些。
6)路由
Elasticsearch写入文档时,文档会通过一个公式路由到一个索引中的一个分片上。默认公式如下:
shard_num = hash(_routing) % num_primary_shards
_routing字段的取值,默认是_id字段,可以根据业务场景设置经常查询的字段作为路由字段。例如可以考虑将用户id、地区作为路由字段,查询时可以过滤不必要的分片,加快查询速度。
7)避免使用wildcard模糊匹配查询
Elasticsearch默认支持通过*?正则表达式来做模糊匹配,数据量级别达到TB+甚至更高之后,模糊匹配查询通常会耗时比较长,甚至可能导致内存溢出,卡死乃至崩溃宕机的情况。所以数据量大的情况下,不要使用模糊匹配查询。
- 点赞
- 收藏
- 关注作者
评论(0)