# ElasticSearch
# 简介和基础
简称ES,是一个开源的分布式全文搜索引擎。es是面向文档的,主要就是JSON。ES在后台吧每个 索引划分为多个分片
,每个分片可以在集群中的不同服务器间迁移。
对比关系型数据库
Relational DB | ElasticSearch |
---|---|
数据库(database) | 索引(indices) |
表(tables) | types(弃用) |
行(rows) | 文档(documents) |
字段(columns) | fields |
核心概念
- 索引 倒排索引,一个ES索引是由多个lucene索引组成的
- 字段类型
- 文档(documents)
- ik 分词器
- 把一段中文划分成一个一个的词语,在搜索时,会自动分词。
- ik提供两个分词算法:
ik_smart
(最少切分) 和ik_max_word
(最细力度切分) - ik分词器可以自定义自己的字典库
# 基础测试
- 索引操作
创建索引
PUT /db0/type/1
{
"name":"鲁班七号",
"age":5
}
1
2
3
4
5
2
3
4
5
可以看到已经成功了
创建规则
PUT /db1
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
获取信息 GET db1
可以获取默认信息 GET _cat/indices?v
修改,更新
PUT /db3/_doc/1
{
"name": "测试数据123",
"age": 12,
"birth": "1998-01-09"
}
1
2
3
4
5
6
2
3
4
5
6
修改,更新
POST /db3/_doc/1/_update
{
"doc": {
"name": "测试数据456"
}
}
1
2
3
4
5
6
2
3
4
5
6
删除 DELETE /db0
- 文档操作(重点)
基本操作
添加数据
PUT /biubiu/user/1
{
"name": "爸爸",
"age": 23,
"desc": "一顿操作猛如虎,一看工资两千五",
"tags": ["技术宅","暖男","Java"]
}
1
2
3
4
5
6
7
2
3
4
5
6
7
查询数据 GET /biubiu/user/1
更新数据
PUT /biubiu/user/1
{
"name": "张可欣",
"age": 23,
"desc": "一顿操作猛如虎,一看工资两千五",
"tags": ["技术宅","暖男","Java"]
}
1
2
3
4
5
6
7
2
3
4
5
6
7
推荐使用这种更新 _update
POST /biubiu/user/1/_update
{
"doc":{
"name": "张大仙"
}
}
1
2
3
4
5
6
2
3
4
5
6
简单搜索
简单搜索 GET /biubiu/user/1
简单条件搜索 GET /biubiu/user/_search?q=name:张
复杂搜索
搜索 query
字段 _source
排序 sort
分页 from
size
GET biubiu/user/_search
{
"query": {
"match": {
"name": "张大"
}
},
"_source": ["name", "desc","age"],
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 1,
"size": 2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
must(and) should(or)must_not(not)
GET biubiu/user/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "张大仙"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
过滤器,范围查询 年龄 10 -25
GET biubiu/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "张"
}
}
],
"filter": [
{
"range": {
"age": {
"gte": 10,
"lte": 25
}
}
}
]
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
多个条件用空格分隔 技术 男
GET biubiu/user/_search
{
"query": {
"match": {
"tags": "技术 男"
}
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
精确查询
精确查询 term 查询通过倒排索引指定的词条精确查找
关于分词
- term 查询通过倒排索引指定的词条精确查找
- match 使用分词器解析
高亮查询