做导航网站不侵权吗个人网站案例
2026/4/6 2:16:01 网站建设 项目流程
做导航网站不侵权吗,个人网站案例,专业的建设机械网站,页面跳转是什么意思文章目录详细描述一下 Elasticsearch 搜索的过程 ?一、问题背景二、总体流程概述三、搜索过程详解1. 用户发起请求2. 分词处理#xff08;1#xff09;什么是分词#xff1f;#xff08;2#xff09;分词器的选择#xff08;3#xff09;分词的配置3. 查询解析#xf…文章目录详细描述一下 Elasticsearch 搜索的过程 ?一、问题背景二、总体流程概述三、搜索过程详解1. 用户发起请求2. 分词处理1什么是分词2分词器的选择3分词的配置3. 查询解析1Query DSL 的作用2内部表示4. 执行查询1Query 阶段2Fetch 阶段5. 返回结果总结希望这篇文章对你有所帮助如果你有任何问题欢迎随时留言讨论。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把详细描述一下 Elasticsearch 搜索的过程 ?大家好我是都叫我闫工今天要跟大家聊一个非常有意思的话题Elasticsearch 的搜索过程到底是怎么运作的作为一个 Elasticsearch 的忠实粉丝我经常会被问到这个问题。说实话一开始我也是一知半解但经过一段时间的学习和实践后终于对这个过程有了比较清晰的认识。今天我就来跟大家分享一下我的理解。一、问题背景Elasticsearch 是一个基于 Lucene 的分布式搜索引擎它的核心功能就是快速地响应用户的搜索请求并返回相关的结果。那么当我们输入一个搜索词的时候Elasticsearch 内部到底发生了什么这个问题听起来简单但其实里面涉及到很多复杂的机制。二、总体流程概述在深入细节之前我先给大家画一个整体的流程图用户发起请求比如搜索 “都叫我闫工”。分词处理将输入的文本分解成更小的单元词项。查询解析将用户的请求转换为 Elasticsearch 能理解的查询结构。执行查询在每个索引的每个分片上执行查询。收集结果并进行排序。返回结果将最终的结果返回给用户。整个过程看起来简单但每一步都隐藏着很多细节和优化点。接下来我会逐一展开讲解。三、搜索过程详解1. 用户发起请求这个部分很简单就是我们通过 REST API 或者其他客户端发送一个 HTTP 请求。比如GET /my_index/_search { query: { match: { title: 都叫我闫工 } } }这里需要注意的是用户提交的查询会被 Elasticsearch 解析成某种内部结构这个过程可能会涉及到一些默认的设置和配置。2. 分词处理分词是搜索引擎的核心之一。Elasticsearch 使用倒排索引Inverted Index来存储数据而倒排索引的构建依赖于分词的结果。因此分词的正确性和效率对搜索结果的质量影响很大。1什么是分词简单来说分词就是将一段文本分解成更小的单元这些单元通常被称为term词项。比如 “都叫我闫工” 可能会被分词成以下几个 term都我闫工2分词器的选择Elasticsearch 提供了多种分词器每种分词器都有自己的特点。例如标准分词器简单地按照空格和标点符号进行分词。中文分词器专门针对中文的分词器比如 IK 分词器或 MMSEG 分词器。假设我们使用的是中文分词器那么 “都叫我闫工” 可能会被分成以下 term[都, 我, 叫, 闫工]需要注意的是默认情况下 Elasticsearch 使用的是标准分词器如果你要处理中文文本最好配置一个合适的中文分词器。3分词的配置在索引创建时我们需要指定分词器。比如PUT/my_index{settings:{analysis:{analyzer:{ik_analyzer:{type:custom,tokenizer:ik_max_word}}}},mappings:{properties:{title:{type:text,analyzer:ik_analyzer}}}}这段配置的意思是创建一个名为my_index的索引。在analysis中定义了一个自定义的分词器ik_analyzer使用的是 IK 分词器最大词模式。在字段title上使用这个分词器。这样当我们搜索 “都叫我闫工” 时Elasticsearch 会用 IK 分词器对输入进行处理。3. 查询解析分词完成后Elasticsearch 需要把用户的查询转换成一种可以高效执行的结构。这里涉及到两个重要的概念Query DSLElasticsearch 提供了一套强大的查询语言允许我们以 JSON 的形式构建复杂的查询。内部表示Elasticsearch 会把用户的查询转换为某种内部数据结构以便后续执行。1Query DSL 的作用Query DSLDomain Specific Language是 Elasticsearch 的核心查询语法。它支持各种类型的查询比如match进行分词匹配。term精确匹配。bool组合多个查询条件。fuzzy模糊匹配。回到我们的例子用户的查询是{query:{match:{title:都叫我闫工}}}Elasticsearch 会把这个查询解析成一个包含多个 term 的布尔查询。比如必须同时满足都、我、叫和闫工这四个条件。或者根据设置的不同可能只是匹配这些 term 中的任意一个。2内部表示在解析完 Query DSL 之后Elasticsearch 会生成一种叫做BooleanQuery的结构。这个结构包含了所有需要查询的 term以及它们之间的逻辑关系比如 AND、OR 等。以我们的例子为例最终的 BooleanQuery 可能是这样的title:都 title:我 title:叫 title:闫工这意味着用户希望同时匹配这四个 term。4. 执行查询接下来Elasticsearch 会将这个 BooleanQuery 发送到所有相关的分片上执行。这里涉及到两个重要的阶段Query 阶段确定哪些文档需要被考虑。Fetch 阶段获取这些文档的详细信息。1Query 阶段在 Query 阶段Elasticsearch 会遍历所有相关的分片并根据 BooleanQuery 来筛选出可能符合条件的文档。这个过程是基于倒排索引完成的。什么是倒排索引倒排索引是一种数据结构它记录了每个 term 出现的位置和频率。比如对于 term “都”倒排索引会告诉我们在哪些文档中出现了这个词。同样地对于 “我”、“叫” 和 “闫工”也会有对应的记录。通过查询倒排索引Elasticsearch 可以快速找到包含这些 term 的文档。然后根据 BooleanQuery 的逻辑关系比如 AND 或 OR它会筛选出符合条件的文档集合。2Fetch 阶段在 Query 阶段完成后我们已经得到了一个候选文档的列表。接下来Elasticsearch 会进入 Fetch 阶段这个阶段的主要任务是获取这些文档的实际内容并按照相关性进行排序。排序机制Elasticsearch 的排序是基于BM25 算法的默认情况下会根据文档与查询的相关性进行排名。BM25 是一种概率性的排名函数它考虑了以下因素词频Term Frequency一个 term 在文档中出现的次数。逆文档频率Inverse Document Frequency一个 term 在所有文档中的分布情况。回到我们的例子假设我们有以下几个文档文档 A标题是 “都叫我闫工”文档 B标题是 “我叫闫工”文档 C标题是 “都叫闫工”Elasticsearch 会根据 BM25 算法对这些文档进行排序。通常包含所有查询 term 的文档比如文档 A会被排在前面。5. 返回结果最后Elasticsearch 会将排序后的结果返回给用户。用户可以通过设置from和size来控制分页或者通过聚合来获取更多的统计信息。总结整个过程可以简单地总结为以下几个步骤分词将用户的查询拆分成多个 term。解析将这些 term 转换成一个可以高效执行的 BooleanQuery。查询阶段在各个分片上筛选出符合条件的文档。获取阶段获取这些文档的实际内容并进行排序。返回结果将排序后的结果返回给用户。通过理解这个过程我们可以更好地优化我们的搜索应用。比如选择合适的分词器可以提高搜索的相关性。合理设置索引的分析配置可以提升性能。理解排名机制可以帮助我们调整查询策略。希望这篇文章对你有所帮助如果你有任何问题欢迎随时留言讨论。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把你想做外包吗闫工就是外包出身但我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询