目录
一、什么是倒排索引?有什么好处?
正排索引:书本的目录
倒排索引:书本的索引
图书和搜索引擎的对比
图书:
正牌索引-目录页
倒排索引-索引页
搜索引擎:
正排索引-文档Id到文档内容和单词的关联
倒排索引-单词到文档Id的关系
倒排索引的核心组成
倒排索引包含两个部分:
(1)单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系
(2)倒排列表(Posting List)- 记录了单词对应的文档结合,由倒排索引项组成
倒排索引项:
> 文档ID
> 词频TF -该单词在文档中出现的次数,用于相关性评分
> 位置 Postion - 单词在文档中分词的位置,用于语句搜索 (phrase query)
> 偏移 Offset-记录单词的开始结束位置,实现高亮显示
如:
ES 的倒排索引
(1)ES 的JSON 文档中的每个字段,都有自己的倒排索引
(2)可以指定对某些字段不做索引
> 优点:节省存储空间
> 缺点:字段无法被搜索
二、ES了解多少?说说你们公司的ES集群架构?


2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
3、支持分布式,扩展性好,可部署上百台服务器集群,处理PB级数据。
4、近实时的获取索引数据、搜索数据。
5、降低全文检索的学习曲线,可以被任何编程语言调用。

三、如何进行中文分词?用过哪些分词器?
1、Analyzer 的组成
> Character Filters : 针对原始文本进行处理,如:去除html
> Tokenizer : 按照规则切分为单词
> Token Filter :将切分的单词进行加工、大小写转化、增加同义词
2、ES 内置分词器
> Standard Analyzer - 默认分词器,按词切分,小写处理
> Simple Analyzer - 按照非字母切分,非字母的都被去除,小写处理
> Stop Analyzer - 停用词过滤,小写处理,如:the, a, is
> Whitespace Analyzer - 按照空格切分,不转小写
> Keyword Analyzer - 不分词,直接将输出当作term输出
> Patter Analyzer - 正则表达式分词
> Language - 提供30多种常见语言的分词器
> Customer Analyzer - 自定义分词器
3、中文分词的难点
> 中文句子,切分成一个一个词,而不是一个一个字
> 英文中,单词有自热的空格作为分隔
> 一句中文,在不同的上下文,有不同的理解
如:这个苹果,不大好吃 / 这个苹果,不大,好吃!
4、其他中文分词插件
> ICU Analyzer
> IK Analyzer
5、查看分词粒度
http://172.31.100.175:9200/ingredients_es_index/_analyze/
{"field": "name","text": "西红柿炒鸡蛋","analyzer": "ik_smart"}
{ "tokens": [ {
"token": "西红柿炒鸡蛋",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
}]}
四、ES写入数据的工作原理是什么?
