ElasticSearch 是一个基于Lucene构建的开源、分布式,RESTful搜索引擎。它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索的存储库)。ElasticSearch为应用程序提供搜索算法和相关的基础架构,用户只需要将应用程序中的数据上载到ElasticSearch数据存储中,就可以通过RESTful URL与其交互。ElasticSearch的架构明显不同于它之前的其他搜索引擎架构,因为它是通过水平伸缩的方式来构建的。不同于Solr,它在设计之初的目标就是构建分布式平台,这使得它能够和云技术以及大数据技术的崛起完美吻合。ElasticSearch构建在更稳定的开源搜索引擎Lucene之上,它的工作方式与无模式的JSON文档数据非常类似。
es和lucene,solr一样,都是无模式的基于列式的存储格式,这和大多数的NoSQL数据库是一样的,非常灵活,下面我们通过一张图,来看下关系型数据库映射到es里面,对应的名词关系:
关系型数据库 非关系型数据库
database index
table type
row document
column field
schema mapping
index everything is indexed
select * from table curl localhost:9200/_search?pretty=true
了解这个之后,我们对es的认识就会更加清晰明了,下面我们看下es自身的一些优势和功能:
1,一个基于分布式的Restful的搜索引擎
2,高可用
3,每份索引是基于冲置中的一个shard
4,每个shard可以有一个或多个副本
5,读操作自动负载到任何一个副本
6,多租户和多Type的
7,支持多于一种索引(类似数据库)
8,一个索引又支持多种type(类似表)
9,灵活的索引配置,分片数,存储类型
10,多种多样的set的api接口
11,基于http的restful的api
12,完美支持本地原生Java api
13,所有的api操作,支持自动路由转发
14,面向Document的存储模式
15,动态的数据类型配置,无须提前定义
16,schema可以给每个type进行定制化操作
17,长久的高可靠,异步的写支持
18,近实时的搜索效果(注意是近实时,不是实时)
19,基于Apache Luecene
20,每个shard都是一个功能齐全的lucene索引
21,所有的lucene功能在es里都可以通过简单的配置和插件进行实现
22,保证操作一致性
23,单个doc(相当于关系型数据库里的一行数据)级别的操作,支持A(原子的),C(一致的),I离的),D(持久的)特性
24,完 全基于Lucene开源的企业级全文检索框架
不同的读写场景支持:
es是一个高可靠的,分布式的搜索引擎,每份超大的索引被拆分成多个shards,每一个shard支持一个或多个副本,默认情况下,一份大的索引拆分成5个shards,每个shard又有一个副本(5/1),当然,我们也可以根据自己的情况配置适合我们的拓扑结构,,包括1个shard,10个副本(1/10),支持读多写少的场景,或者20个shard,一个备份,支持写多,读少的场景,当然在我们搜索时,会是类似一个map,reduce的过程,多个map检索,最后在一个reduce进行合并结果。
为了支持es的分布式的特性,每个shard会部署在一个或多个node(机器节点)上,支持启动和关闭,只要确保我们写正确了http端口,系统就会继
续接受请求,为我们查询最近一次的索引的数据
当我看到某大神翻译的es中文档是里面好多语句不知道该去哪里验证,我在web端尝试了,get等,最
终发现在linux shell中可以使用curl:curl: -X 后面跟 RESTful : GET, POST …
-d 后面跟数据。 (d = data to send)
- create:
指定 ID 来建立新记录。 (貌似PUT, POST)
$ curl -XPOST 192.168.231.168:9200/films/md/2 -d ’
{ “name”:”MCYarn”, “sex”: “man”}’
使用自动生成的 ID 建立新纪录:
$ curl -XPOST 192.168.231.168:9200/filmsgood -d ’
{ “name”:”MCYarn”, “tag”: “man”}’
localhost:
2.1 查询所有的 index, type:
$ curl 192.168.231.168:9200/_search?pretty=true
2.2 查询某个index下所有的type:
$ curl 192.168.231.168:9200/films/_search
2.3 查询某个index 下, 某个 type下所有的记录:
$ curl 192.168.231.168:9200/films/md/_search?pretty=true
2.4 带有参数的查询:
$ curl 192.168.231.168:9200/films/md/_search?q=tag:good
2.5 使用JSON参数的查询: (注意 query 和 term 关键字)
$ curl localhost:9200/film/_search -d ’
{“query” : { “term”: { “sex”:”man”}}}’