• Search 执行的时候实际分两个步骤运作的
    - Query 阶段
    - Fetch 阶段
  • Query-Then-Fetch

Query阶段

Fetch阶段

相关性算分问题

  • 相关性算分在shard与shard间是相互独立的,也就意味着同一个term的IDF值在不同shard上是不同的。文档的相关性算分和他所处的shard相关
  • 在文档数量不多是,会导致相关性算分严重不准的情况发生
  • 解决思路有两个:
    - 一是设置分片数为1个,从根本上排除问题,在问当数量不多的时候可以考虑该方案,比如百万到千万级别的文档数量
    - 二是使用 DFS Query-then-Fetch 查询方式
    - DFS Query-then-Fetch 是在拿到所有文档后再重现完整的计算一次相关性算分,耗费更多的cpu和内存,执行新能底下,一般不建议使用。使用方式如下:

排序

  • es 默认会采用相关性算分排序,用户可以设定sorting 参数来自行设定排序规则
  • 按照字符串排序比较特殊,因为es 有 text和keyword 两种类型,针对text类型排序,如下所示:
  • 针对 keyword类型排序,可以返回预期结果
  • 排序的过程实质是对字段原始内容排序的过程,这个过程中倒排索引无法发挥作用,需要用到正排索引,也是通过文档Id和字段可以快速得到字段原始内容。
  • es对此提供了3种实现方式:
    - fielddata 默认禁用
    - doc values 默认启用,除了 text 类型

Fielddata vs DocValues

Fielddata

  • Fielddata 默认是关闭的,可以通过如下api开启
    - 此时字符串是按照分词后的term排序,往往结果很难复合预期
    - 一般是在对分词做聚合分析的时候开启

Doc Values

  • Doc Values 默认是启用的,可以在创建索引的时候关闭:
    - 如果后面要再开启 doc values,需要做 reindex 操作
  • 可以通过该字段获取 fielddata 或者 doc values 中存储的内容

Elasticsearch之深入了解Search的运行机制相关推荐

  1. 傻傻分不清的javascript运行机制

    学习到javascript的运行机制时,有几个概念经常出现在各种文章中且容易混淆.Execution Context(执行环境或执行上下文),Context Stack (执行栈),Variable ...

  2. 从hello world 说程序运行机制

    http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇 学习任何一门编程语言,都会从hello world 开始.对于 ...

  3. js 多个定时器_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(二)

    作者:撒网要见鱼   https://segmentfault.com/a/1190000012925872 本文接上篇 <从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(一)> ...

  4. session对象运行机制

    当你看到 "会话" 这个词的时候,你会怎么理解呢?是交流.对话的意思吗?那毫无疑问绝对是的啦,只不过那是传统意义上的,或者说是日常生活中的意思,在计算机科学领域,它的意思就要引申一 ...

  5. http和https的区别 与 SSL/TLS协议运行机制的概述

    http和https的区别 与 SSL/TLS协议运行机制的概述 参考1 1 http 是不使用的SSL/TSL的通信通道 窃听风险:第三方获取通信内容 篡改风险:修改通信内容 冒充风险:冒充他人身份 ...

  6. 第3课:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错...

    本期内容: 解密Spark Streaming Job架构和运行机制 解密Spark Streaming容错架构和运行机制 理解SparkStreaming的Job的整个架构和运行机制对于精通Spar ...

  7. 浅谈SQL Server内部运行机制

    原文:浅谈SQL Server内部运行机制 对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL ...

  8. 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制

    内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代 ...

  9. WebForm页面生命周期及asp.net运行机制

    转载至:https://www.cnblogs.com/liangxiaofeng/p/5620033.html 1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请 ...

最新文章

  1. 任务调度算法题Java_一个任务调度问题-----算法导论
  2. 北航计算机考研 跨考,过来人分享:给外校跨考北航同学的建议
  3. python组合数据类型有哪些_Python学习之组合数据类型
  4. 闫智宣的开发版_Android
  5. static的应用以及静态与非静态的区别
  6. 嵌入式知识概要(1)
  7. mac iterm2 安装 lrzsz rz sz命令
  8. 二叉树常见算法总结(java)
  9. 如何将多张二维码合成一个新的动态二维码进行随机扫码
  10. SQL数据库学习,常用语句查询大全
  11. kali更新grub修复双系统windows10引导启动项
  12. java调用腾讯企业邮箱给谷歌(gmail)邮箱发送邮件丢失或进入垃圾邮箱
  13. 2015-2016 Petrozavodsk Winter Training Camp, Moscow SU Trinity Contest(Gym 100962)
  14. 专利修改:solidworks出线条图
  15. 一文读懂MES系统生产调度管理功能
  16. Ubuntu14.04+Texlive2014+LYX-Linux下LYX的中文配置方案
  17. 【多线程】采用Callable接口创建线程
  18. suricata 命令
  19. 企业数字化转型的道法术器之我见
  20. timesten mysql_Timesten(TT)和ORACLE执行效率测试

热门文章

  1. 实验室管理好助手——Bio-lab
  2. Nature子刊:南土所贾仲君组-稻田甲烷氧化的微生物机制
  3. QIIME 2用户文档. 17鉴定和过滤嵌合体序列q2-vsearch(2019.7)
  4. matplotlib可视化时间序列数据、并高亮时间序列中的指定区域(Highlight a Region of Time-Series Plot with Matplotlib)
  5. R语言基于多字段(多数据列、multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案
  6. R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比
  7. R语言ggpattern填充各种色彩、形状、纹理、图片到ggplot2可视化图像中示例
  8. R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table、独热编码、缺失值删除、DMatrix结构生成)
  9. 密度聚类OPTICS算法
  10. 深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战