版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nongfuyumin/article/details/79471639
elasticsearch之简单使用
一、elasticsearch基本概念
在Elasticsearch中存储数据的行为就叫做索引(indexing),不过在索引之前,我们需要明确数据应该存储在哪里。
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
基于HTTP协议,以JSON为数据交互格式的RESTful API
其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过
curl
命令与Elasticsearch通信。
向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
- VERB HTTP方法:
GET
,POST
,PUT
,HEAD
,DELETE
- PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
- HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
- PORT Elasticsearch HTTP服务所在的端口,默认为9200
- PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
- QUERY_STRING 一些可选的查询请求参数,例如
?pretty
参数将使请求返回更加美观易读的JSON数据 - BODY 一个JSON格式的请求主体(如果请求需要的话)
二、基本使用
创建、查看索引:
curl -XPUT '172.17.150.27:9200/megacorp'
curl '172.17.150.27:9200/_cat/indices?v'
在索引里面添加、查询文档
curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}'
curl -i -XGET 'http://172.17.150.27:9200/megacorp/employee/1?pretty'
-i参数可以显示Http头部 pretty以美观的格式显示
判断文档是否存在:
curl -i -XHEAD 'http://172.17.150.27:9200/megacorp/employee/1?pretty'
删除文档
curl -i -XDELETE 'http://172.17.150.27:9200/megacorp/employee/1?pretty'
更新 文档,档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档,可以使用index api重建索引或者替换它
curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music,sport" ,]
}'
可以看到,result值为updated,说明更新了文档,created值为false,-version值加一
这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch遵循与之前所说完全相同的过程,这个过程如下:
- 从旧文档中检索JSON
- 修改它
- 删除旧文档
- 索引新文档
也可以使用update api进行局部更新,更方便有效
curl -i -XPOST '172.17.150.27:9200/megacorp/employee/1/_update?pretty' -d '{"doc":{"interests": [ "sports", "music" ]}}'
查询文档数量与明细
curl -i -XGET '172.17.150.27:9200/megacorp/employee/_count?pretty'
curl -i -XGET '172.17.150.27:9200/megacorp/employee/_search?pretty'
Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的
GROUP BY
但是功能更强大。
举个例子,让我们找到所有职员中最大的共同点(兴趣爱好)是什么:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
根据官方文档显示,出现该错误是因为5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认
是禁用的,
如果有需要单独开启,这样做的目的是为了节省内存空间。
可以手动开启text字段的使用,
curl -XPUT 'http://172.17.150.27:9200/megacorp/_mapping/employee' -d '{"properties":{"interests":{"type":"text","fielddata":true}}}'
再执行聚合命令
最后,
elasticsearch的简单使用就写到这边了,主要参考 https://www.gitbook.com/book/looly/elasticsearch-the-definitive-guide-cn