Elasticsearch整理
一、什么是Elasticsearch? 【端口9200】
ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的。
二、为什么要用es搜索引擎
1、分词查询数据库是很难做到的
2、高亮信息的显示,不用搜素引擎我们需要在代码中路做大量的处理
3、倒排索引的机制使得查询速度非常快
三、Lucene与Elasticsearch的关系?
Lucene只是一个库。想要使用它,需要使用java来作为开发语言将其直接集成到你的应用中。
Elasticsearch使用的java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,通过简单的RESTful来隐藏Lucene的复杂性,让全文搜索变得简单。
Elasticsearch不仅仅包括全文搜索的功能,还可以进行一下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,
四、Elasticsearch与Solr对比
1、elasticsearch是分布式的 ,不需要其他组件,分发是实时的;
2、es完全支持Lucene的接近实时的搜索;
3、Solr在不考虑建索引(写数据)的同时进行搜索,速度更快。
4、性能方面:【solr不适合是使用搜索的应用】
当实时建立索引时,Solr会产生io阻塞,查询性能较差
随着数据量的增加,Solr的搜索效率会变得更低,而es却没有明显的变化
五、可以用head工具来查看es的运行状态以及数据。IK Analysis中文分词器来进行分词的操作。
六、倒排索引
1、正排索引 通过key找value
2、倒排索引
通过value找key。
在文档数据插入到索引库的时候,es会对文档进行分词。 分词时,根据关键词出现的频率进行id排序,出现频率高的词的id就靠前,分完词会对对应的词的文档记录一个倒排文档列表(倒排文档列表中包含有该词出现的文档DocID以及在该文档中出现的次数,以及改成此时出现在该文档中的位置是第几个词)。当用户搜这个词的时候,就会找到对应的倒排文档列表,把所有的文档列表揪出来,然后根据出现的频率进行排序,然后查找。
七、分片
在存储一个文档时,es将改文的那个人分成n份,分到n个不同的分片上。然后取数据的时候,通过节点上的分片同时取出这n份数据,拼成一个完整的数据。这样做速度更快
八、es库中的数据使用logstash来导入 【端口9600】
【公司中有个专门的logstash服务器哎专门定时导入数据到es库中】
logstash可以将很多第三方的数据源导入到es中。