Elasticsearch 向量搜索
Elasticsearch 向量搜索
本文将会介绍 Elasticsearch 向量搜索的两种方式。
向量搜索
提到向量搜索,我想你一定想知道:
- 向量搜索是什么?
- 向量搜索的应用场景有哪些?
- 向量搜索与全文搜索有何不同?
ES 的全文搜索简而言之就是将文本进行分词,然后基于词通过 BM25 算法计算相关性得分,从而找到与搜索语句相似的文本,其本质上是一种 term-based(基于词)的搜索。
本文将会介绍 Elasticsearch 向量搜索的两种方式。
提到向量搜索,我想你一定想知道:
ES 的全文搜索简而言之就是将文本进行分词,然后基于词通过 BM25 算法计算相关性得分,从而找到与搜索语句相似的文本,其本质上是一种 term-based(基于词)的搜索。
现如今有很多 IT 系统的基础设施直接使用了云厂商提供的服务,假设我们需要构建以下基础设施:
那么在公有云的环境中,我们一般怎么做?
Kubernetes pod 启动时会拉取用户指定的镜像,一旦这个过程耗时太久就会导致 pod 长时间处于 pending 的状态,从而无法快速提供服务。
镜像拉取的过程参考下图所示:
MySQL 客户端与服务器之间的通信基于特定的 TCP 协议,本文将会详解其中的 Connection 和 Replication 部分,这两个部分分别对应的是客户端与服务器建立连接、完成认证鉴权,以及客户端注册成为一个 slave 并获取 master 的 binlog 日志。
在实际应用中,我们经常需要把 MySQL 的数据同步至其它数据源,也就是在对 MySQL 的数据进行了新增、修改、删除等操作后,把该数据相关的业务逻辑变更也应用到其它数据源,例如:
ES 有两种 search_type
即搜索类型:
query_then_fetch
(默认)dfs_query_then_fetch
query_then_fetch
Local
Term/Document 频率。_id
和 _score
)返回给请求节点。缺点:由于每个分片独立使用自身的而不是全局的 Term/Document 频率进行相关度打分,当数据分布不均匀时可能会造成打分偏差,从而影响最终搜索结果的相关性。
所谓 search template 搜索模板其实就是:
使用搜索模板可以将 DSL 从应用程序中解耦出来,并且可以更加灵活的更改查询语句。
time_local
: 请求的时间remote_addr
: 客户端的 IP 地址request_method
: 请求方法request_schema
: 请求协议,常见的 http 和 httpsrequest_host
: 请求的域名request_path
: 请求的 path 路径request_query
: 请求的 query 参数request_size
: 请求的大小referer
: 请求来源地址,假设你在 a.com 网站下贴了 b.com 的链接,那么当用户从 a.com 点击访问 b.com 的时候,referer 记录的就是 a.com ,这个是浏览器的行为user_agent
: 客户端浏览器相关信息status
: 请求的响应状态request_time
: 请求的耗时bytes_sent
: 响应的大小很多时候我们会使用负载网关去代理转发请求给实际的后端服务,这时候请求日志还会包括以下数据:
Elasticsearch 会为 query 的每个文档计算一个相关度得分 score ,并默认按照 score 从高到低的顺序返回搜索结果。 在很多场景下,我们不仅需要搜索到匹配的结果,还需要能够按照某种方式对搜索结果重新打分排序。例如: