elasticsearch篇之正/倒排索引与分词

正/倒排索引


类似于书的目录,目录能够方便的定位哪一章节或哪一小节的页码,但是无法定位某一关键字的位置。有一些书的最后有索引页,它的功能就是帮助定位某些关键字出现的位置。

目录页对应正排索引
索引页对应倒排索引

正排索引和倒排索引


对于搜索引擎来讲:

正排索引是文档 Id 到文档内容、单词的关联关系。也就是说可以通过 Id获取到文档的内容。

倒排索引是单词到文档 Id 的关联关系。也就是说了一通过单词搜索到文档 Id。

倒排索引的查询流程是:首先根据关键字搜索到对应的文档 Id,然后根据正排索引查询文档 Id 的完整内容,最后返回给用户想要的结果。

倒排索引的组成

倒排索引是搜索引擎的核心,主要包含两个部分:

  • 单词词典(Trem Dictionary):记录的是所有的文档分词后的结果
  • 倒排列表(Posting List):记录了单词对应文档的集合,由倒排索引项(Posting)组成。

单词字典的实现一般采用B+Tree的方式,来保证高效

倒排索引项(Posting)主要包含如下的信息:
1、文档ID,用于获取原始文档的信息
2、单词频率(TF,Term Frequency),记录该单词在该文档中出现的次数,用于后续相关性算分。
3、位置(Position),记录单词在文档中的分词位置(多个),用于做词语搜索。
4、偏移(Offset),记录单词在文档的开始和结束位置,用于高亮显示。

es存储的是一个json的内容,其中包含很多字段,每个字段都会有自己的倒排索引。

分词


分词和分词器

分词是指将文本转换成一系列的单词的过程,也可以叫做文本分析,在es中称为Analysis。

例如文本“elasticsearch是最流行的搜索引擎”,经过分词后变成“elasticsearch”,“流行”,“搜索引擎”

分词器(Analyzer)是es中专门用于分词的组件,它的组成如下:

组成 功能
Character Filter 针对原始文本进行处理,比如去除html标记符。
Tokenuzer 将原始文本按照一定规则切分为单词。
Token Filters 针对tokenizer处理的单词进行再加工,比如转为小写、删除或新增等。

分词器组成的调用是有顺序的:
这里写图片描述

Analyze API

es提供了一个测试分词的api接口,方便验证分词效果,endpoint是_analyze

这个api具有以下特点:

  • 可以直接指定analyzer进行测试
  • 可以直接指定索引中的字段进行测试
  • 可以自定义分词器进行测试

直接指定analyzer进行测试

请求举例:

POST _analyze
{
    "analyzer": "standard",
    "text": "hello world"
}

analyzer表示指定的分词器,这里使用es自带的分词器standard,text用来指定待分词的文本

这里写图片描述

从结果中可以看到,分词器将文本分成了hello 和 world两个单词

指定索引中的字段进行测试

应用场景:当创建好索引后发现某一字段的查询和预期不一样,就可

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值