elasticsearch入门

发布 : 2018-07-25 分类 : 存储 浏览 :

elasticsearch入门


入门

单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

下面的命令可以查看当前节点的所有 Index。

$ curl -X GET ‘http://localhost:9200/_cat/indices?v'

下面的命令可以列出每个 Index 所包含的 Type。

$ curl ‘localhost:9200/_mapping?pretty=true’

_cat命令查看状态

查看所有索引

_cat/indies?v```
1
2
3
4
5
6

_cat命令可以查看elasticsearch状态

* verbose

每个命令都支持?v参数,来显示详细信息

$ curl localhost:9200/_cat/master?v
id host ip node
QG6QrX32QSi8C3-xQmrSoA 127.0.0.1 127.0.0.1 Manslaughter

1
2
3
4

* help

每个命令都支持使用help参数,来输出可以显示的列:

GET _cat/master?help
id | | node id
host | h | host name
ip | | ip address
node | n | node name

1
2
3
4

* headers

通过h参数,可以指定输出字段

GET /_cat/master?v
id host ip node
QG6QrX32QSi8C3-xQmrSoA 127.0.0.1 127.0.0.1 Manslaughter

GET /_cat/master?h=host,ip,node
127.0.0.1 127.0.0.1 Manslaughter

1
2
3
4
5
6

#### `索引增删`

新建 Index,可以直接向 Elastic 服务器发出 PUT 请求。下面的例子是新建一个名叫weather的 Index。

```PUT /weather

服务器返回一个 JSON 对象,里面的acknowledged字段表示操作成功。

1
2
3
4
{
"acknowledged":true,
"shards_acknowledged":true
}

查看weather索引信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GET weather

{
"weather": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1532482584126",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "2tl4hhjRS4Cj3fD475p5JQ",
"version": {
"created": "5040099"
},
"provided_name": "weather"
}
}
}
}

其中,number_of_replicas 是数据备份数,如果只有一台机器,设置为0;number_of_shards 是数据分片数,默认为5,有时候设置为3

获取设置信息

1
2
3
4
5
6
7
8
9
10
#获取weather的设置
GET weather/_settings

#获取所有的设置
GET _all/_settings
#获取所有的设置(同上)
GET _settings

#获取weather和accounts的设置
GET weather,accounts/_settings

修改副本数量:

1
2
3
4
PUT weather/_settings
{
"number_of_replicas": 2
}

新增记录

向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录。比如,向/accounts/person发送请求,就可以新增一条人员记录。

1
2
3
4
5
PUT accounts/job/1
{
"user":"王二麻",
"title":"系统分析师"
}

服务器返回的 JSON 对象,会给出 Index、Type、Id、Version 等信息。

1
2
3
4
5
6
7
8
9
{
"_index":"accounts",
"_type":"person",
"_id":"1",
"_version":1,
"result":"created",
"_shards":{"total":2,"successful":1,"failed":0},
"created":true
}

新增记录的时候,也可以不指定 Id,这时要改成 POST 请求。

1
2
3
4
5
6
POST /accounts/job
{
"user": "李四",
"title": "工程师",
"desc": "系统管理"
}'

服务器返回的 JSON 对象里面,_id字段就是一个随机字符串。

1
2
3
4
5
6
7
8
9
{
"_index":"accounts",
"_type":"person",
"_id":"AV3qGfrC6jMbsbXb6k1p",
"_version":1,
"result":"created",
"_shards":{"total":2,"successful":1,"failed":0},
"created":true
}

查询记录

使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。

1
2
3
4
5
6
7
8
9
#查询该索引下所有文档
GET accounts/_search
GET accounts/job/_search

查询单个文档
GET accounts/job/1
GET accounts/job/1?_source
GET accounts/job/1?_source=title
GET accounts/job/1?_source=user,title

查询返回结果中字段含义:

1
2
3
4
5
6
7
took: 表示该操作的耗时(ms)
timeout: 是否超时
hits: 表示命中的记录
total:返回记录数
max_score:最高的匹配程度
hits:返回的记录组成的数组。
_score: 匹配程度,最高为1.0,默认是按照这个字段降序排列。

全文搜索

Elastic 的查询非常特别,使用自己的查询语法,要求 GET 请求带有数据体。

1
2
3
4
5
6
7
8
GET accounts/job/_search
{
"query":{
"match": {
"desc": "师"
}
}
}

上面代码使用 Match 查询,指定的匹配条件是desc字段里面包含”师”这个词。返回结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"took": 26,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.28582606,
"hits": [
{
"_index": "accounts",
"_type": "job",
"_id": "1",
"_score": 0.28582606,
"_source": {
"user": "张三",
"title": "工程师",
"desc": "数据管理工程师"
}
}
]
}
}

Elastic 默认一次返回10条结果,可以通过size字段改变这个设置。

1
2
3
4
5
6
7
8
9
GET accounts/job/_search
{
"query":{
"match": {
"desc": "师"
}
},
"size":1
}

上面代码指定,每次只返回一条结果。

还可以通过from字段,指定位移。

1
2
3
4
5
6
7
8
9
10
GET accounts/job/_search
{
"query":{
"match": {
"desc": "师"
}
},
"from":1,
"size":1
}

如果有多个搜索关键字, Elastic 认为它们是or关系

1
2
3
4
5
6
7
8
GET accounts/job/_search
{
"query":{
"match": {
"desc": "师 shi"
}
}
}

上面代码搜索的是软件 or 系统。

如果要执行多个关键词的and搜索,必须使用布尔查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET accounts/job/_search
{
"query":{
"bool": {
"must": [
{"match": {
"title": "师"
}},
{"match": {
"desc": "师"
}}
]
}
}
}

修改记录 (直接覆盖)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUT accounts/job/1
{
"user":"张三",
"title":"工程师" ,
"desc":"数据管理工程师"
}

#或者

POST accounts/job/AWTPLR57niBd4cuXBYQc/_update
{
"doc":{
"desc":"teacher"
}
}

更新记录后,返回结果中有几个字段发生改变:

1
2
3
"_version" : 2,
"result" : "updated",
"created" : false

版本(version)从1变成2,操作类型(result)从created变成updated,created字段变成false,因为这次不是新建记录。

删除记录

1
2
3
4
5
6
7
8
#删除一条记录(文章),
DELETE accounts/job/1

#删除一个type(表) es5不再支持删除type
DELETE accounts/job

#删除整个 index (库)
DELETE accounts
本文作者 : 对六
原文链接 : http://duiliuliu.github.io/2018/07/25/2018-07-25-elasticsearch入门/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

你我共勉!

微信

微信

支付宝

支付宝

留下足迹