定义
ES是一个全文搜索引擎、分布式文档数据库,每个字段皆是被索引的数据且可被搜索,能够在短时间内存储、搜索、分析大量数据。
这里提一下全文搜索,百度可得:是指计算机搜索程序通过扫描文章的每个词,对每个词建立一个索引,指明该词在文章中出现的位置和次数,当用户进行搜索时,就会通过事先建立的索引进行查找,并将结果反馈给用户。
ES的全文搜索功能是基于Lucene构建的,Lucene是一个开源的全文搜索引擎工具包。
为高可用、可扩展而生。
用于全文搜索、结构搜索、分析。
将Elasticsearch和关系型数据术语对照:
关系数据库 | 数据库 | 表 | 行 | 列 |
---|---|---|---|---|
Elasticsearch | 索引(index) | 类型(type) | 文档(documents) | 字段(fields) |
初次接触ELasticSearch,我觉着可以先暂时这样去理解它里面的index、type、document、field,当然如果有更好的理解方式,也欢迎分享。
Lucene倒排索引
上文中提到了Lucene,然后再说下Lucene用到的倒排索引:
-
起源:实际应用中需要根据属性值来查找记录。这种索引表的每一项都包括一个属性值和具有该属性的各记录的地址。
-
倒排索引一般表示为一个关键词,然后是它的频度、出现的位置。
-
建立倒排索引的步骤:
-
取得关键字:找出字符串中所有的字符,英文单词用空格分隔,比较好处理,中文是连在一起的,需要特殊的分词处理;标点与无意义的字符需要过滤掉;所有的单词要统一大小写;支持模糊查询,例如查询‘live’时可以将‘lived’、‘lives’也查询到,所以需要统一处理成‘live’。以上措施在Lucene中用analyzer来完成。
-
记录关键词在数据中的出现频率跟出现位置,另外,关键词是按照字符顺序排列的,所以可用二元搜索法快速定位关键词。
-
Lucene将上面三列作为词典文件、频率文件、位置文件报错,其中词典文件不仅保存关键词,还保存了指向频率文件跟位置文件的指针。
-
为减小索引文件大小,Lucene使用压缩技术,分为对关键词进行压缩跟对数字的压缩,例如当前词是阿拉伯语,上一个词为阿拉伯,那阿拉伯语压缩为<3,语>;数字只保留与上一个值的差值,减少保存该字数需要的字节数,如当前数字为12345,上一个数字为12349,压缩后保存为4。
-