Elasticsearch项目实战整理之搜索篇

在讲文本搜索之前,我们需要先知道文本的倒排索引是如何构建的。我们都知道es文本常用的两种数据类型keyword, text,这两种文本类型唯一区别就是在索引文档时,keyword类型文本不会进行分词,而是直接将字段内容作为一个关键词,构造倒排索引。而text字段会对对应文本进行分词,分词之后变成一个或多个关键词,构造倒排索引。

搜索之term

term搜索是一种等值比较的搜索,es会将term中全部文本作为一个关键词在倒排索引中匹配查询,如有匹配则返回结果。term查询场景适用于查询如 性别,类型等需要进行全部值匹配的查询场景,查询结果不会计算分数,速度相对较快。

搜索之match

match搜索是一种模糊搜索,适用于查询某个文本是否包含某些关键词,文本与搜索关键词的相似度的查询,在实际应用中如百度搜索,淘宝中根据一定词语对商品的搜索都是使用match搜索。match搜索会计算目标文档中相应字段文本与查询语句的相似度,根据相似情况进行打分。

match搜索实现原理是将查询语句通过分词器进行分词,变为多个查询关键词,然后将这些关键词在倒排索引中匹配查询,获得结果。

综上所述,term与match之间的区别:term不会对查询语句进行分词,也不会对查询结果打分,是一种全量文本的等值匹配。 match会进行分词,会进行打分,是一种相似度查询。

搜索之搜索过程

在这里插入图片描述

以上图三个节点为例,三个节点组成一个es集群,一个索引,3主3从。

  1. 当查询从客户端发送到节点3时,此客户端发送的请求被节点3接受并处理,此时我们称节点3为此次请求的协调节点,节点3会将查询发送到索引对应的三个分片,三个分片可能是主可能是从,es会根据负载均衡算法来决定查询请求发送到哪个分片。
  2. 各个分片会将查询结果的docid和排序字段返回给协调节点,注此时并不返回文档的全部数据。
  3. 协调节点根据各个分片返回的docid和排序字段进行排序,筛选出需要返回给客户端的文档docid
  4. 使用docid去对应分片上拉取文档真实数据,返回给客户端
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值