elasticsearch是什么?
elasticsearch是一个基于apache lucene,实时分布式搜索和分析引擎。也是用java开发的,经过使用Restful api来封装lucene的底层实现,使得交互变得简单。和通常的数据库不一样的是,它能够进行全文搜索,处理同义词和根据相关性给文档打分,根据同一份数据生成分析和聚合的结果等。
安装elasticsearch
注意:1):2.* 版本及如下支持jdk7,2.*版本以上要求jdk8
2):vi ./config/elasticsearch.yml network.host: 0.0.0.0 #容许外网访问
restfulapi与es交互
curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'
例如:
curl -XGET ‘http://10.128.208.93:9200/_count?pretty’ -d '{"query":{"match_all":{}}}'
VERB HTTP方法: GET , POST , PUT , HEAD , DELETE
PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
HOST Elasticsearch集群中的任何一个节点的主机名,若是是在本地的节点,那么就叫localhost
PORT Elasticsearch HTTP服务所在的端口,默认为9200
QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观易读的JSON数据
BODY 一个JSON格式的请求主体(若是请求须要的话)
概念与关系型数据库对比
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
例子:es数据的简单操做
新增:
curl -XPUT 'http://localhost:9200/megacorp/employee/1'
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
搜索id为1的:
curl -XGET 'http://localhost:9200/megacorp/employee/1'
搜索类型为employee的所有数据:
curl -XGET 'http://localhost:9200/megacorp/employee/_search?pretty'
按条件查询:
curl -XGET 'http://localhost:9200/megacorp/employee/_search?pretty&q=last_name:Smith'
DSL查询:
curl -XGET 'http://localhost:9200/megacorp/employee/_search?pretty' -d '{"query":{"match":{"last_name":"Smith"}}}'
找到姓氏为“Smith”的员工,可是咱们只想获得年龄大于30岁的员工:
全文搜索:
搜索全部喜欢“rock climbing”的员工:
高亮搜索:
统计每种兴趣下职员的平均年龄: