ElasticSearch使用规范-查询规范

举报
FI小粉丝 发表于 2021/05/21 14:20:05 2021/05/21
【摘要】 查询规范建议1)定义好mappings和settings,不同的数据类型查询效率不一样,建议只需做精确查询以及范围查询的字段设置为keyword类型。对于要进行全文检索的字段设置合理的分词器。2)对于只需要查询数据结果而不需要结果的相关度计算的情况,使用filter query能大幅提升你的查询效率。例如过滤某车牌和号码。3)避免一次性取出大量的数量:Elasticsearch被设计为一个搜...

查询规范建议

1)定义好mappingssettings,不同的数据类型查询效率不一样,建议只需做精确查询以及范围查询的字段设置为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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。