ElasticSearch是一個開源的分布式搜索引擎,具備高可靠性,支持非常多的企業(yè)級搜索用例。像Solr4一樣,是基于Lucene構建的。支持時間時間索引和全文檢索。官網:http://www.elasticsearch.org
它對外提供一系列基于java和http的api,用于索引、檢索、修改大多數配置。
本文從Ubuntu1604下的Docker安裝啟動ElasticSearch、創(chuàng)建索引、搜索三方面說明ElasticSearch的易用性。
一、啟動ElasticSearch
docker run -d -p 9200:9200 -p 9300:9300 elasticsearch:2
注:
-
-p 9200:9200 -p 9300:9300
參數可以讓運行ElasticSearch外的其他終端訪問ElasticSearch; - docker加速器請參考加速器安裝。
瀏覽器中打開http://192.168.29.128:9200/
,如果結果如下:
Paste_Image.png
說明安裝和啟動成功。
二、創(chuàng)建索引
在服務器上插入15條數據:
curl -XPUT 'http://localhost:9200/dept/employee/1' -d '{ "empname": "emp1"}'
curl -XPUT 'http://localhost:9200/dept/employee/2' -d '{ "empname": "emp2"}'
curl -XPUT 'http://localhost:9200/dept/employee/3' -d '{ "empname": "emp3"}'
curl -XPUT 'http://localhost:9200/dept/employee/4' -d '{ "empname": "emp4"}'
curl -XPUT 'http://localhost:9200/dept/employee/5' -d '{ "empname": "emp5"}'
curl -XPUT 'http://localhost:9200/dept/employee/6' -d '{ "empname": "emp6"}'
curl -XPUT 'http://localhost:9200/dept/employee/7' -d '{ "empname": "emp7"}'
curl -XPUT 'http://localhost:9200/dept/employee/8' -d '{ "empname": "emp8"}'
curl -XPUT 'http://localhost:9200/dept/employee/9' -d '{ "empname": "emp9"}'
curl -XPUT 'http://localhost:9200/dept/employee/10' -d '{ "empname": "emp10"}'
curl -XPUT 'http://localhost:9200/dept/employee/11' -d '{ "empname": "emp11"}'
curl -XPUT 'http://localhost:9200/dept/employee/12' -d '{ "empname": "emp12"}'
curl -XPUT 'http://localhost:9200/dept/employee/13' -d '{ "empname": "emp13"}'
curl -XPUT 'http://localhost:9200/dept/employee/14' -d '{ "empname": "emp14"}'
curl -XPUT 'http://localhost:9200/dept/employee/15' -d '{ "empname": "emp15"}'
其中http://localhost:9200/dept/employee/1
的dept
代表索引,employee
代表文檔類型,1
代表文檔編號。
ElasticSearch的基本概念:
ElasticSearch-->indices(索引)-->types(文檔類型)-->documents(文檔)
通過http://192.168.29.128:9200/dept/employee/_search
查看剛才添加的所有索引,結果如下:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 16,
"max_score": 1,
"hits": [
{
"_index": "dept",
"_type": "employee",
"_id": "14",
"_score": 1,
"_source": {
"empname": "emp14"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "32",
"_score": 1,
"_source": {
"empname": "emp32"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "5",
"_score": 1,
"_source": {
"empname": "emp5"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "8",
"_score": 1,
"_source": {
"empname": "emp8"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "9",
"_score": 1,
"_source": {
"empname": "emp9"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "10",
"_score": 1,
"_source": {
"empname": "emp10"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "12",
"_score": 1,
"_source": {
"empname": "emp12"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "2",
"_score": 1,
"_source": {
"empname": "emp2"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "4",
"_score": 1,
"_source": {
"empname": "emp4"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "6",
"_score": 1,
"_source": {
"empname": "emp6"
}
}
]
}
}
三、簡單搜索
剛才已經查看了所有新創(chuàng)建的索引,現在更新一下第10條記錄:
curl -XPUT 'http://localhost:9200/dept/employee/10' -d '{ "empname": "emp10 emp1 emp3"}'
然后搜索empname
包含emp1
的文檔:
http://192.168.29.128:9200/dept/employee/_search?q=empname:emp1
結果如下:
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1.4054651,
"hits": [
{
"_index": "dept",
"_type": "employee",
"_id": "1",
"_score": 1.4054651,
"_source": {
"empname": "emp1"
}
},
{
"_index": "dept",
"_type": "employee",
"_id": "10",
"_score": 1.1263815,
"_source": {
"empname": "emp10 emp1 emp3"
}
}
]
}
}
上面通過http get的方式進行的搜索也可以用DSL(Domain Specific Language特定領域語言)代替,結果一樣:
{
"query" : {
"match" : {
"empname" : "emp1"
}
}
}
結束
暫時記錄這么多,為了快速上手,并說明ElasticSearch的易用性。
參考文檔: