ElasticSearch使用规范-查询规范
【摘要】 查询规范建议1)定义好mappings和settings,不同的数据类型查询效率不一样,建议只需做精确查询以及范围查询的字段设置为keyword类型。对于要进行全文检索的字段设置合理的分词器。2)对于只需要查询数据结果而不需要结果的相关度计算的情况,使用filter query能大幅提升你的查询效率。例如过滤某车牌和号码。3)避免一次性取出大量的数量: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+甚至更高之后,模糊匹配查询通常会耗时比较长,甚至可能导致内存溢出,卡死乃至崩溃宕机的情况。所以数据量大的情况下,不要使用模糊匹配查询。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)