ElasticSearch基本概念

2019-03-06  本文已影响0人  玄冰0825

ES和solr的区别

  1. 当实时建立索引的时候。solr会产生IO阻塞。而ES不会,ES查询效率更高。
  2. 不断动态添加数据时,solr的检索效率会变得低下,ES没什么变化。
  3. sorl利用zookeeper做分布式管理,ES自带分布式管理功能。solr要部署到web服务器上,如tomcat,启动时要配置tomcat与solr的关联。
  4. solr支持更多的数据数据【xml、json、csv】,ES仅支持json。
  5. 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

上一篇 下一篇

猜你喜欢

热点阅读