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」的員工:
高亮搜索:
統計每種興趣下職員的平均年齡: