倒排索引:是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。
倒排索引包括两部分:单词词典(Term Dictionary)和倒排列表(Posting List).
记录了所有文档的单词,记录单词与倒排列表的关联关系。
单词词典一般比较大,可以通过B+树或者哈希拉链法实现,以满足高性能的插入与查询
倒排列表记录了单词对应的文档结合,由倒排索引项组成:
倒排索引项(Posting)
Standard Analyzer按词切分(其中的符号被过滤),filter做小写处理,不使用停用词;
Simple Analyzer,按非字母切分(其中的非字母的被过滤),filter做小写处理,不使用停用词。
Stop Analyzer,是Simple Analyzer 的升级版,按非字母切分(其中的非字母的被过滤),filter做小写处理,使用停用词(会把the,a is等修饰词去除)。
Whitespace Analyzer,按照空格切分(不过滤符号),区分大小写,不使用停用词
Keyword Analyzer,不做分词,直接将输入当成一个语句输出
Pattern Analyzer,通过正则表达式进行分词(其中的符号被过滤),默认\W+, 非字符的符号进行分隔,,不使用停用词。
Language Analyzer,根据语言进行分词。
icu_analyzer,增加对Unicode和全球化的支持,以提供对亚洲语言更好的文本分割分析,还有大量对除英语外其他语言进行正确匹配和排序所必须的分词过滤器。
插件地址:https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-icu.html
GET _analyze
{
"analyzer": "icu_analyzer",
"text":"我爱北京天安门"
}
分词结果:
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "",
"position" : 0
},
{
"token" : "爱",
"start_offset" : 1,
"end_offset" : 2,
"type" : "",
"position" : 1
},
{
"token" : "北京",
"start_offset" : 2,
"end_offset" : 4,
"type" : "",
"position" : 2
},
{
"token" : "天安门",
"start_offset" : 4,
"end_offset" : 7,
"type" : "",
"position" : 3
}
]
}
非常牛逼的一款开源的中文分词器,推荐使用。
git地址:https://github.com/medcl/elasticsearch-analysis-ik
详细的资料,请自行查看吧,这里给一个列子:
GET _analyze
{
"analyzer": "ik_smart",
"text":"我爱北京天安门"
}
分词结果:
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "爱",
"start_offset" : 1,
"end_offset" : 2,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "北京",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "天安门",
"start_offset" : 4,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 3
}
]
}
THU Lexucal Analyzer for Chinese,, 清华大学自然语言处理和社会人文计算实验室的一套中文分词器。
git地址:https://github.com/microbun/elasticsearch-thulac-plugin
但是这个分词器目前还没有针对elasticsearch7.11.1的分词器的release的包。