倒排索引
搜索引擎
- 正排索引——文档ld到文档内容和单词的关联
- 倒排索引——单词到文档Id的关系
倒排索引的核心组成
倒排索引包含两个部分
-
单词词典 (Term Dictionary), 记录所有文档的单词,记录单词到倒排列表的关联关系
- 单词词典一般比较大,可以通过B +树或哈希拉链法实现,以满足高性能的插入与查询
-
倒排列表(Posting List) - 记录了单词对应的文档结合,由倒排索引项组成
- 倒排索引项(Posting)
- 文档ID
- 词频TF-该单词在文档中出现的次数,用于相关性评分
- 位置(Position) -单词在文档中分词的位置。用于语句搜索(phrase query)
- 偏移(Offset) -记录单词的开始结束位置,实现高亮显示
- 倒排索引项(Posting)
Analyzer
GET _analyze
{
//分词器名称
"analyzer": "standard",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
standard analyzer
- 默认分词器
- 按词切分
- 小写处理
返回结果
"2,running,quick,brown,foxes,leap,over,lazy,dogs,in,the,summer,evening"
simple analyzer
- 按照非字母切分
- 非字母的都被去除
- 小写处理
返回结果
"running,quick,brown,foxes,leap,over,lazy,dogs,in,the,summer,evening"
whitespace analyzer
- 按空格切分
返回结果
"2,running,Quick,brown-foxes,leap,over,lazy,dogs,in,the,summer,evening"
stop analyzer
相比Simple Analyzer
多了stop filter
会把the,a,is等修饰性词语去除
返回结果
"running,quick,brown,foxes,leap,over,lazy,dogs,summer,evening"
keyword analyzer
不分词,直接将输入当成一个term输出
pattern analyzer
- 通过正则表达式进行分词
- 默认是\W+,非字符的符号进行分隔
返回结果
"2,running,quick,brown,foxes,leap,over,lazy,dogs,in,the,summer,evening"
english analyzer
返回结果
"2,runn,quick,brown,fox,leap,over,lazy,dogs,summer,even"