一、文本索引简介
1、结构
- 文本索引是倒排索引的一种,由Dictionary和posting两部分组成,Dictionary存储了检索词的哈希词表,Posting存储了实际的倒排链数据。
- 对于文本索引,字段文本的生成是通过将Token哈希得到key,value,next的三元组。其中key是检索词的哈希,value是倒排链的位置偏移,next是在哈希碰撞时的下一个位置。
- 而Posting存储了实际的倒排索引数据,主要分为三个部分,第一部分是Term meta,存储了DF、TTF Term payload等数据,第二部分是Doc list,Doc list中分别包含文档的ID、词频以及payload,第三部分是position list,主要包含了检索词在Doc中的位置以及相应的payload。
相关信息的具体含义如下图所示:
2、文本索引的特性
相比较于倒排索引的其他索引,文本索引有一些独有的特性,以下是文本索引的特性:
- 文本索引的field必须为TEXT类型,TEXT文本索引只支持单field,文本索引支持position信息,文本索引采取分词器将TEXT切分成多个term,然后对每个term建倒排,其配置可以参考右侧index params,以决定是否将这些信息存储在索引之中。
- TEXT的文本索引与string类型索引的区别主要在于:文本索引先用分词器将文本分成多个检索词,再对每个检索词都建立倒排索引,而string索引是将整个string作为整体建立倒排索引。
{ "name": "text_index", "index_type": "TEXT", "index_config": { "index_params": { "term_payload_flag": "1", "doc_payload_flag": "1", "position_payload_flag": "1", "position_list_flag": "1", "term_frequency_flag": "1" }, "index_fields": [ { "field_name": "title" } ], "compress_type": "ZSTD" } }
二、文本索引实践
这部分通过对TEXT索引配置不同的分析器,学习如何配置文本索引以及不同分析器对于文本索引查询的效果。
1、配置文本索引
首先配置jieba分析器,将类型为TEXT的title字段配置上 jieba 分词器,拉起集群后,查询效果,可以看到 jieba 分析器将字段进行了切分,切分为一个一个的Token,单独建立了倒排索引。再次查询,如“专业”,能够查到对应的Doc。
2、不同分析器对文本索引效果不同
以配置简单分词器为例。简单分词器是通过空格进行分词的,而数据中不存在空格,所以此时会将整个字段建立一个索引。使用query查询效果,查询“专业”,无法查询到结果,因为此时是以整个字段建立索引,我们可以尝试将整个字段进行查询,方可查询到结果。
以上是本次课程的群补内容。
三、结尾
具体Havenask文本索引的视频可以通过链接查看,欢迎各位开发者使用。
关注我们:
Havenask 开源官网:https://havenask.net/
Havenask-Github 开源项目地址:https://github.com/alibaba/havenask
阿里云 OpenSearch 官网:https://www.aliyun.com/product/opensearch
钉钉扫码加入 Havenask 开源官方技术交流群: