【ElasticSearch入门】3、倒排索引、分词器
一、倒排索引
首先大家可以去看看这篇文章,讲的不错!
时间序列数据库的秘密(2)——索引_数据库_陶文_InfoQ精选文章
- 正排索引-文档 Id 到文档内容和单词的关联
- 倒排索引-单词到文档 Id 的关系
倒排索引表三列:单词,次数,文档ID和位置。
- 倒排索引包含两部分:单词词典(Team Dictionary)和倒排列表(Posting List)
- 单词词典记录单词到倒排列表的关联关系,一般通过 B+ 树或者哈希链表实现
- 倒排列表记录单词对应的文档结合,由倒排索引项组成
- 倒排索引项由文档ID(docId),词频(term frequencies),单词位置(term postion),偏移量(character offsets)组成
ES 也可以指定对某些字段不做索引
- 优点:节省存储空间
- 缺点:字段无法被搜索
二、分词器
2.1 Analysis 与 Analyzer
你只能搜索在索引中出现的词条,所以索引文本和查询字符串必须标准化为相同的格式。分词和标准化的过程称为分析。
Analysis 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词,Analysis 是通过 Analyzer 来实现的。 Elasticsearch 有多种内置的分析器,如果不满足也可以根据自己的需求定制化分析器,除了在数据写入时转换词条,匹配 Query 语句时候也需要用相同的分析器对查询语句进行分析。
2.2 Analysis 组成部分
Analyzer分为以下组成部分:
- Character Filters (针对原始文本处理,例如,可以使用字符过滤器将印度阿拉伯数字( )转换为其等效的阿拉伯语-拉丁语(0123456789),去除http前缀)
- Tokenizer(按照规则切分为单词),将把文本 “Quick brown fox!” 转换成 terms [Quick, brown, fox!],tokenizer 还记录文本单词位置以及偏移量。
- Token Filter(将切分的的单词进行加工、小写、刪除 stopwords,增加同义词)
2.3 es 内置的分词器
三、分词器demo
standard
- 默认分词器
- 按词分类
- 小写处理
#standard 分词器
GET _analyze
{
"analyzer": "standard",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
分词结果
#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html to enable security.
{
"tokens" : [
{
"token" : "the",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<ALPHANUM>",