专栏首页别先生Elasticsearch 6.x版本全文检索学习之Search的运行机制

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

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/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ERROR: invalid byte sequence for encoding "UTF8": 0x00

    1、使用kettle批量导入数据的时候,数据出现了下面的错误。ERROR: invalid byte sequence for encoding "UTF8":...

    别先生
  • mydate97时间控件的使用

    mydate97官网: http://www.my97.net/dp/index.asp   1:用法如下所示,首先下载一个这个东西:     链接:http:...

    别先生
  • kafka.common.KafkaException: Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instan

    别先生
  • Could not find artifact com.sun:tools:jar:1.5.0

    【maven package】,则依然报错,但报的是另外一个错误: [INFO] Scanning for projects…[INFO]           ...

    cloudskyme
  • 全栈工程师的百宝箱:黑魔法之文档篇

    今天收集Session数据的时候收集到了这样的一条,就是“全栈工程师的工具箱”。星期一又想不到什么可以写的内容,就来这样的一篇好了。 以下的内容都是压箱底的,...

    Phodal
  • 简单易学的机器学习算法——SVD奇异值分解

        特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征。然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵。

    zhaozhiyong
  • Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志

    最近,各个操作系统针对Intel CPU的Meltdown(熔断)和Spectre(幽灵)这两个芯片级的设计漏洞推出了安全补丁。在更新了新的Kernel之后,我...

    用户1332428
  • 全栈工程师的百宝箱:黑魔法之文档篇

    今天收集Session数据的时候收集到了这样的一条,就是“全栈工程师的工具箱”。星期一又想不到什么可以写的内容,就来这样的一篇好了。 以下的内容都是压箱底的,...

    Rainbond开源
  • AV1在WebRTC上的实时应用

    本文是来自AOMedia Symposium 2019的演讲,讲者是来自CoSMo Software的工程师Dr.Alex,主题是具有SVC特性的AV1在Web...

    用户1324186
  • “马云一个亿都请不动的黑客教父”,警方发现是无业男

    “马云一个亿聘请被拒绝”“中国最年轻黑客教父”,这一个个响亮的称号被放在了一名无业的青年男子郭某身上。他通过网上虚拟自己的身份信息,录制黑客视频,吸引粉丝充值牟...

    七月半夏

扫码关注云+社区

领取腾讯云代金券