ES和solr的区别
- 当实时建立索引的时候。solr会产生IO阻塞。而ES不会,ES查询效率更高。
- 不断动态添加数据时,solr的检索效率会变得低下,ES没什么变化。
- sorl利用zookeeper做分布式管理,ES自带分布式管理功能。solr要部署到web服务器上,如tomcat,启动时要配置tomcat与solr的关联。
- solr支持更多的数据数据【xml、json、csv】,ES仅支持json。
- solr对已有数据检索时效率更好,ES对实时建立索引和动态添加数据时的检索效率更好。
ElasticSearch名词解释
索引(Index)
索引是具有类似特性的文档的集合,相当于SQL中的一个数据库。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。
类型(Type)
索引内部的逻辑分区(category/partition),相当于“表”。
文档(Document)
索引和搜索的原子单位,基于JSON格式进行表示,包含了一个或多个域(Field)的容器,相当于“行”。
域(Fields)
相当于“列”
Elasticsearch是如何做到快速索引的
答案:倒排索引(Inverted Index)
假设有这么几条数据:
ID | Name | Age | Sex |
---|---|---|---|
1 | Kate | 24 | Female |
2 | John | 24 | Male |
3 | Bill | 29 | Male |
ID是Elasticsearch自建的文档id,那么Elasticsearch建立的索引如下:
Name:
Term | Posting List |
---|---|
Kate | 1 |
John | 2 |
Bill | 3 |
Age:
Term | Posting List |
---|---|
24 | [1,2] |
29 | 3 |
Sex:
Term | Posting List |
---|---|
Female | 1 |
Male | [2,3] |
Elasticsearch分别为每个field都建立了一个倒排索引,Kate, John, 24, Female这些叫term,而[1,2]就是Posting List。Posting list就是一个int的数组,存储了所有符合某个term的文档id。
Elasticsearch为了能快速找到某个term,将所有的term排个序,这就是Term Dictionary,二分法查找term,logN的查找效率。
ES通过内存查找term,不读磁盘,但是如果term太多,term dictionary也会很大,于是有了Term Index
网友评论