<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Elasticsearch on 凌虚 Blog</title><link>https://rifewang.github.io/categories/elasticsearch/</link><description>Recent content in Elasticsearch on 凌虚 Blog</description><generator>Hugo</generator><language>zh-CN</language><copyright>Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)</copyright><lastBuildDate>Wed, 30 Oct 2024 00:49:37 +0800</lastBuildDate><atom:link href="https://rifewang.github.io/categories/elasticsearch/index.xml" rel="self" type="application/rss+xml"/><item><title>我的 2024 年 Elasticsearch 认证考试经验与真题回顾</title><link>https://rifewang.github.io/2024-ece/</link><pubDate>Sun, 17 Mar 2024 22:18:54 +0800</pubDate><guid>https://rifewang.github.io/2024-ece/</guid><description>&lt;h2 id="背景说明"&gt;背景说明&lt;/h2&gt;
&lt;p&gt;大家好，我是凌虚。&lt;/p&gt;
&lt;p&gt;我于 2024 年 3 月 14 日参加了 Elastic Certified Engineer（ECE）认证考试，并与 18 日收到了考试通过的邮件。本文将会回顾我的考试过程、考试真题、个人感受。&lt;/p&gt;</description></item><item><title>Elasticsearch 向量搜索</title><link>https://rifewang.github.io/es-vector-search/</link><pubDate>Fri, 15 Apr 2022 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/es-vector-search/</guid><description>&lt;h1 id="elasticsearch-向量搜索"&gt;Elasticsearch 向量搜索&lt;/h1&gt;
&lt;p&gt;本文将会介绍 Elasticsearch 向量搜索的两种方式。&lt;/p&gt;
&lt;h2 id="向量搜索"&gt;向量搜索&lt;/h2&gt;
&lt;p&gt;提到向量搜索，我想你一定想知道：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;向量搜索是什么？&lt;/li&gt;
&lt;li&gt;向量搜索的应用场景有哪些？&lt;/li&gt;
&lt;li&gt;向量搜索与全文搜索有何不同？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ES 的全文搜索简而言之就是将文本进行分词，然后基于词通过 BM25 算法计算相关性得分，从而找到与搜索语句相似的文本，其本质上是一种 term-based（基于词）的搜索。&lt;/p&gt;</description></item><item><title>Elasticsearch 分布式搜索的运行机制</title><link>https://rifewang.github.io/es-distribute-search-steps/</link><pubDate>Tue, 17 Nov 2020 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/es-distribute-search-steps/</guid><description>&lt;h1 id="elasticsearch-分布式搜索的运行机制"&gt;Elasticsearch 分布式搜索的运行机制&lt;/h1&gt;
&lt;p&gt;ES 有两种 &lt;code&gt;search_type&lt;/code&gt; 即搜索类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;query_then_fetch&lt;/code&gt; （默认）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dfs_query_then_fetch&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="query_then_fetch"&gt;&lt;code&gt;query_then_fetch&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img
 class="lazyload"
 src="https://rifewang.github.io/svg/loading.min.svg"
 data-src="https://raw.githubusercontent.com/RifeWang/images/master/es-query-then-fetch.png"
 data-srcset="https://raw.githubusercontent.com/RifeWang/images/master/es-query-then-fetch.png, https://raw.githubusercontent.com/RifeWang/images/master/es-query-then-fetch.png 1.5x, https://raw.githubusercontent.com/RifeWang/images/master/es-query-then-fetch.png 2x"
 data-sizes="auto"
 alt="https://raw.githubusercontent.com/RifeWang/images/master/es-query-then-fetch.png"
 title="query_then_fetch" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户发起搜索，请求到集群中的某个节点。&lt;/li&gt;
&lt;li&gt;query 会被发送到所有相关的 shard 分片上。&lt;/li&gt;
&lt;li&gt;每个 shard 分片独立执行 query 搜索文档并进行排序分页等，打分时使用的是分片本身的 &lt;code&gt;Local&lt;/code&gt; Term/Document 频率。&lt;/li&gt;
&lt;li&gt;分片的 query 结果（只有元数据，例如 &lt;code&gt;_id&lt;/code&gt; 和 &lt;code&gt;_score&lt;/code&gt;）返回给请求节点。&lt;/li&gt;
&lt;li&gt;请求节点对所有分片的 query 结果进行汇总，然后根据打分排序和分页，最后选择出搜索结果文档（也只有元数据）。&lt;/li&gt;
&lt;li&gt;根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。&lt;/li&gt;
&lt;li&gt;得到详细的文档数据，组成搜索结果，将结果返回给用户。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;缺点：由于每个分片独立使用自身的而不是全局的 Term/Document 频率进行相关度打分，当数据分布不均匀时可能会造成打分偏差，从而影响最终搜索结果的相关性。&lt;/p&gt;</description></item><item><title>Elasticsearch Search Template</title><link>https://rifewang.github.io/es-search-template/</link><pubDate>Mon, 16 Nov 2020 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/es-search-template/</guid><description>&lt;h1 id="elasticsearch-search-template"&gt;Elasticsearch Search Template&lt;/h1&gt;
&lt;p&gt;所谓 search template 搜索模板其实就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;预先定义好查询语句 DSL 的结构并预留参数&lt;/li&gt;
&lt;li&gt;搜索的时再传入参数值&lt;/li&gt;
&lt;li&gt;渲染出完整的 DSL ，最后进行搜索&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用搜索模板可以将 DSL 从应用程序中解耦出来，并且可以更加灵活的更改查询语句。&lt;/p&gt;</description></item><item><title>构造请求日志分析系统</title><link>https://rifewang.github.io/log-analyzer-system/</link><pubDate>Sat, 07 Nov 2020 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/log-analyzer-system/</guid><description>&lt;h1 id="构造请求日志分析系统"&gt;构造请求日志分析系统&lt;/h1&gt;
&lt;h2 id="请求日志记录哪些数据"&gt;请求日志记录哪些数据&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time_local&lt;/code&gt; : 请求的时间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remote_addr&lt;/code&gt; : 客户端的 IP 地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_method&lt;/code&gt; : 请求方法&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_schema&lt;/code&gt; : 请求协议，常见的 http 和 https&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_host&lt;/code&gt; : 请求的域名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_path&lt;/code&gt; : 请求的 path 路径&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_query&lt;/code&gt; : 请求的 query 参数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_size&lt;/code&gt; : 请求的大小&lt;/li&gt;
&lt;li&gt;&lt;code&gt;referer&lt;/code&gt; : 请求来源地址，假设你在 a.com 网站下贴了 b.com 的链接，那么当用户从 a.com 点击访问 b.com 的时候，referer 记录的就是 a.com ，这个是浏览器的行为&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user_agent&lt;/code&gt; : 客户端浏览器相关信息&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; : 请求的响应状态&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_time&lt;/code&gt; : 请求的耗时&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bytes_sent&lt;/code&gt; : 响应的大小&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很多时候我们会使用负载网关去代理转发请求给实际的后端服务，这时候请求日志还会包括以下数据：&lt;/p&gt;</description></item><item><title>Elasticsearch 自定义打分 Function score query</title><link>https://rifewang.github.io/es-function-score-query/</link><pubDate>Mon, 02 Nov 2020 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/es-function-score-query/</guid><description>&lt;h1 id="elasticsearch-自定义打分-function-score-query"&gt;Elasticsearch 自定义打分 Function score query&lt;/h1&gt;
&lt;p&gt;Elasticsearch 会为 query 的每个文档计算一个相关度得分 score ，并默认按照 score 从高到低的顺序返回搜索结果。
在很多场景下，我们不仅需要搜索到匹配的结果，还需要能够按照某种方式对搜索结果重新打分排序。例如：&lt;/p&gt;</description></item><item><title>数据管道 Logstash 入门</title><link>https://rifewang.github.io/logstash/</link><pubDate>Sun, 01 Nov 2020 00:00:00 +0800</pubDate><guid>https://rifewang.github.io/logstash/</guid><description>&lt;h1 id="logstash-入门"&gt;Logstash 入门&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="logstash-是什么"&gt;Logstash 是什么&lt;/h2&gt;
&lt;p&gt;Logstash 就是一个开源的数据流工具，它会做三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从数据源拉取数据&lt;/li&gt;
&lt;li&gt;对数据进行过滤、转换等处理&lt;/li&gt;
&lt;li&gt;将处理后的数据写入目标地&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监听某个目录下的日志文件，读取文件内容，处理数据，写入 influxdb 。&lt;/li&gt;
&lt;li&gt;从 kafka 中消费消息，处理数据，写入 elasticsearch 。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="为什么要用-logstash-"&gt;为什么要用 Logstash ？&lt;/h3&gt;
&lt;p&gt;方便省事。&lt;/p&gt;</description></item><item><title>Elasticsearch 入门指南</title><link>https://rifewang.github.io/es-guide/</link><pubDate>Sun, 29 Jul 2018 16:24:53 +0800</pubDate><guid>https://rifewang.github.io/es-guide/</guid><description>&lt;h3 id="引言"&gt;引言&lt;/h3&gt;
&lt;p&gt;Elasticsearch 是什么？一个开源的可扩展、高可用、分布式的全文搜索引擎。&lt;/p&gt;
&lt;p&gt;你为什么需要它？《人生一串》中有这样一段话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;没了烟火气，人生就是一段孤独的旅程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而我们如何通过烟火气、人生或者旅程等这样的关键词来搜索出这部纪录片呢？显然无论是传统的关系型数据库，还是 NOSQL 数据库都无法实现这样的需求，而这里 Elasticsearch 就派上了用场。&lt;/p&gt;</description></item></channel></rss>