# ElasticSearch

# 简介和基础

简称ES,是一个开源的分布式全文搜索引擎。es是面向文档的,主要就是JSON。ES在后台吧每个 索引划分为多个分片 ,每个分片可以在集群中的不同服务器间迁移。

对比关系型数据库

Relational DB ElasticSearch
数据库(database) 索引(indices)
表(tables) types(弃用)
行(rows) 文档(documents)
字段(columns) fields

核心概念

  1. 索引 倒排索引,一个ES索引是由多个lucene索引组成的
  2. 字段类型
  3. 文档(documents)
  4. ik 分词器
  • 把一段中文划分成一个一个的词语,在搜索时,会自动分词。
  • ik提供两个分词算法:ik_smart(最少切分) 和 ik_max_word(最细力度切分)
  • ik分词器可以自定义自己的字典库

ik分词

# 基础测试

  1. 索引操作

创建索引

PUT /db0/type/1
{
  "name":"鲁班七号",
  "age":5
}
1
2
3
4
5

OpEFBV.png

可以看到已经成功了

OpVfRH.png

创建规则

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

获取信息 GET db1

可以获取默认信息 GET _cat/indices?v

修改,更新

PUT /db3/_doc/1
{
  "name": "测试数据123",
  "age": 12,
  "birth": "1998-01-09"
}
1
2
3
4
5
6

修改,更新

POST /db3/_doc/1/_update
{
  "doc": {
    "name": "测试数据456"
  }
}
1
2
3
4
5
6

删除 DELETE /db0

  1. 文档操作(重点)

基本操作

添加数据

PUT /biubiu/user/1
{
  "name": "爸爸",
  "age": 23,
  "desc": "一顿操作猛如虎,一看工资两千五",
  "tags": ["技术宅","暖男","Java"]
}
1
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

推荐使用这种更新 _update

POST /biubiu/user/1/_update
{
  "doc":{
    "name": "张大仙"
  }
}
1
2
3
4
5
6

简单搜索

简单搜索 GET /biubiu/user/1

简单条件搜索 GET /biubiu/user/_search?q=name:张

复杂搜索

OplIyD.png

搜索 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

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

过滤器,范围查询 年龄 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

多个条件用空格分隔 技术 男

GET biubiu/user/_search
{
  "query": {
    "match": {
      "tags": "技术 男"
    }
  }
}
1
2
3
4
5
6
7
8

精确查询

精确查询 term 查询通过倒排索引指定的词条精确查找

关于分词

  • term 查询通过倒排索引指定的词条精确查找
  • match 使用分词器解析

OpUAQ1.png

Opdu2d.png

OpdtPg.png

OpwI6s.png

高亮查询

Op0x58.png OpBURe.png