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/
如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?