新工作需要所以开始学一下。。。
elasticsearch的概念和基本原理:
elasticsearch是一个类似于nosql数据库的东西,基于Lucene,以json格式储存数据,采用了倒序索引(也叫反向索引),主要用于信息抓取(我的感觉就是字符串查找),所以主要应用在搜索引擎和自然语言处理方面。
比如有30篇文章,我想找一个字符串出现的位置,普通情况我们要全文搜索,而elasticsearch在存储时,会先把文章分词,然后保存各个关键词出现的位置。这种就是倒序索引(说实话我觉得和普通索引原理差不多,差别有点微妙)。
然后采用压缩技术保证空间的最大利用。
elasticsearch的储存方法和压缩技术:
存了10篇文章,其中第1,3,5,9里面有“张三”这个词出现。
es就会存入:"张三":1,3,5,9;
然后压缩为:"张三":1010100010 (10位2进制数字,对应出现的文章id,这样需要存的数字只有一个,比存1,3,5,9要节省很多,以此压缩存储空间)
上面这个就是5.0之前的压缩方法:bitmap。
不难想象,这样存储需要的空间是线性增长的,比如你需要存6553500个文档,那么你就需要6553500位的二进制数字存储,那么一个字段的索引中的一个出现位置就需要接近100 * 2byte的空间来表示,所以之后进行了优化(压缩套压缩)
Roarding bitmaps:把上面压缩后的数字除以65535然后保存商和余数。使得结果进一步压缩。然后保存为100,0 两个数字。需要空间减少了99倍。
这样等于把数据以65535一组分成了很多组。一个索引存的是2,65534,说明这个词在第2组的第65534篇文章中出现。
如果数据量大于4096个值,用bit set存,如果比较少的话,就直接用2bytes存每个值。 (用java语言,就是数据多就用 Set<byte>来增加效率, 数据少就直接用 short[])。
系统win7 64
ES的主要储存方式是json,所以需要能看懂json数据。
1. 下载
https://www.elastic.co/cn/downloads/past-releases
选工具和版本,然后下载(网上使用教程很多都是6.2.4,不过我这里下载的最新版本)。
elasticsearch本质是存储关键词和出现的位置,英语的句子中单词是用空格和标点符号分开的,很好分词。 I am a student。 -> I,am,a,student
但是我们现在处理语言主要针对汉语,所以自带的分词器就不好用了,es会默认每个字一个词,因此需要绑定插件。
现在主要的中文分词是用的IK(之前停止更新过一段时间,当时最多支持到elatsicsearc6.4.2,所以当年很多教程安装elasticsearch的时候选择了相对早期的6.2.4,然后那些按教程来的教程也都用的6.2.4...)。
不过KI最近貌似又开始更新了,而且更新到了2020.4.1的最新版本,所以这里我选择下载elasticsearch的最新版本。
下载zip包,这样就不用安装了-。-
然后找个文件夹解压,完成。
2. 运行
运行bin文件夹下的 elasticsearch.bat
elasticsearch的绑定端口是9200和9300,启动后打开浏览器,输入
可以看到json格式的elasticsearch信息,说明安装成功
3. 添加IK插件
github: https://github.com/medcl/elasticsearch-analysis-ik/releases
因为是外国服务器所以可能下载会很慢- -我是网上找了个别人下好的百度盘的
https://www.cnblogs.com/jhtian/p/12688246.html
下载后解压,新建一个文件夹改名analysis-ik (很老的版本是改名ik),然后放到elasticsearch的plugins文件夹下。
再次启动elasticsearch, 看到日志里显示ik加载成功(如果路径错了的话会闪退)。