全文检索 Elastisearch 研究
目标
- 了解Elasticsearch的应用场景
- 掌握索引维护的方法
- 掌握基本的搜索Api的使用方法
约束
- 阅读本教程之前需要掌握Lucene的索引方法、搜索方法 。
1 ElasticSearch介绍
1.1 介绍
官方网址:https://www.elastic.co/cn/products/elasticsearch
Github:https://github.com/elastic/elasticsearch
总结:
1、elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
突出优点:
1.扩展性好,可部署上百台服务器集群,处理PB级数据。
2.近实时的去索引数据、搜索数据。
es和solr选择哪个?
1.如果你公司现在用的solr可以满足需求就不要换了。
2.如果你公司准备进行全文检索项目的开发,建议优先考虑elasticsearch,因为像Github这样大规模的搜索都在用 它。
1.2原理与应用
1.2.1索引结构
下图是ElasticSearch的索引结构,下边黑色部分是物理结构,上边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述ElasticSearch的工作原理及去使用物理结构中的索引文件。
逻辑结构部分是一个倒排索引表:
1、将要搜索的文档内容分词,所有不重复的词组成分词列表。
2、将搜索的文档最终以Document方式存储起来。
3、每个词和docment都有关联。
如下:
现在,如果我们想搜索 quick brown
,我们只需要查找包含每个词条的文档:
两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单相似性算法 ,
那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。
1.2.2 倒排索引
倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。
倒排索引包含两个部分:
1 单词词典(Term Dictionary),记录所有文档的单词,记录单词到倒排列表的关联关系
(单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入与查询)
2 倒排列表(Posting List)-记录了单词对应的文档结合,由倒排索引项组成
倒排索引项(Posting):
文档ID
词频TF - 该单词在文档中出现的次数,用于相关性评分
位置(Position)- 单词在文档中分词的位置。用于语句搜索(phrase query)
偏移(Offset)- 记录单词的开始结束位置,实现高亮显示
1.2.3 RESTful应用方法
如何使用es?
Elasticsearch提供 RESTful Api接口进行索引、搜索,并且支持多种客户端。
下图是es在项目中的应用方式:
1)用户在前端搜索关键字
2)项目前端通过http方式请求项目服务端
3)项目服务端通过Http RESTful方式请求ES集群进行搜索
4)ES集群从索引库检索数据。