前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 6.x版本全文检索学习之Search的运行机制

Elasticsearch 6.x版本全文检索学习之Search的运行机制

作者头像
别先生
发布2019-11-12 19:09:01
4690
发布2019-11-12 19:09:01
举报
文章被收录于专栏:别先生

1、Elasticsearch之深入了解Search的运行机制。

  答:Search的运行机制,Search执行的时候实际分两个步骤运作的,分别是Query阶段、Fetch阶段。称为Query-Then-Fetch。

2、Search的运行机制,相关性算分问题。

  答:a、相关性算分在shard与shard间是相互独立的,也就意味着同一个Term的IDF等值在不同shard上是不同的。文档的相关性算分和它所处的shard相关。     b、在文档数量不多的时候,会导致相关性算分严重不准的情况发生。

3、解决相关性算分问题的思路有两个。

  答:a、第一个是设置分片数为1个,从根本上排除问题,在文档数量不多的时候可以考虑该方案,比如百万到千万级别的文档数量。     b、第二个是使用DFS Query-then-Fetch查询方式。DFS Query-then-Fetch是在拿到所有文档后再重新完整的计算一次相关性算分,耗费更多的cpu和内存,执行性能也比较低下,一般不建议使用。

4、Elasticsearch之排序。

  答:es默认会采用相关性算分排序,用户可以通过设定sorting参数来自行设定排序规则。注意,按照字符串排序比较特殊,因为es有text(text会进行分词)和keyword两种类型,针对text类型排序。username.keyword是keyword类型的。如果text类型的字段进行排序会报错,但是使用text类型的字段后面.keyword是可以返回预期结果的。

Fielddata和DocValues的对比。 如下所示:

Fielddata默认是关闭的,可以通过api开启,此时字符串是按照分词后的term排序,往往结果很难符合预期。一般是在对分词做聚合分词的时候开启。Fielddata只对text类型有效果的。

Doc Values默认是启用的,可以在创建索引的时候关闭,如果后面要再开启doc values,需要做reindex操作。什么时候直到不用doc values,明确知道不需要按照这个字段进行排序,不需要按照这个字段做聚合分析,将这个字段doc values关闭,关闭以后加快索引速度,减少磁盘空间占用。

docvalue_fields,可以通过该字段获取fielddata或者doc values中存储的内容。

5、分页与遍历,es提供了3种方式来解决分页与遍历的问题。from/size、scroll、search_after。

  a、from/size,from指明开始位置,size指明要获取的总数。total_page=(total + total_size -1)/page_size。total_page总页数,total文档总数。深度分页问题,解决方法,使用index.max_result_window限定最多到10000条数据。适用场景,需要实时获取顶部的部分文档,且需要自由翻页。

  b、Scroll,遍历文档集的api,以快照的方式来避免深度分页的问题。注意点,不能用来做实时搜索,因为数据不是实时的、尽量不要使用复杂的sort条件,使用_doc最高效、使用稍嫌弃复杂。适用场景,需要全部文档,如导出所有数据的功能。

c、Search_after,避免深度分页的性能问题,提供实时的下一页文档获取功能。注意点如下,缺点是不能使用from参数,即不能指定页数、只能下一页,不能上一页、使用简单。适用场景,需要全部文档,不需要自由翻页。

再牛逼的案例,理论,都没有官网的牛逼,下面贴一下,如何去官网学习。

找到这里,自己可以巴拉巴拉,看自己需要的版本,对应的知识点。

Elasticsearch Query DSL的语法。各种查询语法可以多看看,增加词汇量,学会熟练使用。

作者:别先生 博客园:https://www.cnblogs.com/biehongli/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档