yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • Elasticsearch

    • 01.ES安装
    • 02.es介绍
    • 03.es基本使用
      • 01.基本测试
        • 1.1 测试分词功能
        • 1.2 测试添加数据
      • 02.商品文档的基础操作(CRUD)
        • 2.1 新增商品
        • 2.2 查询一条数据
        • 2.3 修改商品
        • 2.4 删除操作
      • 03.es查询操作
        • 3.1 全部查询
        • 3.2 条件查询
        • 3.3 按条件查询和排序
        • 3.4 分页查询
        • 3.5 只显示指定字段
        • 3.6 多条件匹配查询
        • 3.7 过滤查询
        • 3.8 全文检索
    • 04.中文分词检索
    • 05.python使用ES
    • 06.ES复杂类型
    • 07.制作一些数据
  • MongoDB

  • 消息队列

  • 数据存储
  • Elasticsearch
xugaoyi
2021-02-12
目录

03.es基本使用

# 01.基本测试

# 1.1 测试分词功能

http://192.168.56.66:5601

GET /*          ## 获取所有数据

DELETE /*        ## 删除所有数据

GET /_analyze     ## 测试分词
{
  "analyzer": "ik_max_word",
  "text": "2001A第一帅是谁?"
}
1
2
3
4
5
6
7
8
9

# 1.2 测试添加数据

PUT test1/type1/1
{
  "name":"kitty",
  "age":12
}
1
2
3
4
5

# 02.商品文档的基础操作(CRUD)

# 2.1 新增商品

  • 标准语法
put /index/type/id
{
	k-v类型的数据
}
1
2
3
4
  • 添加第一条数据
put /goods/fruit/1
{
  "name":"xiangjiao",
  "describe":"haochi tian",
  "price":40,
  "producer":"feilvbin",
  "tags":["xiangjiao","haochi"]
}
1
2
3
4
5
6
7
8
  • 添加第二条数据
put /goods/fruit/2
{
  "name":"pingguo",
  "describe":" cui",
  "price":60,
  "producer":"zhongguo",
  "tags":["haokan","xiang"]
}
1
2
3
4
5
6
7
8
  • 其中 goods表示要创建的索引名称(数据库),fruit表示要创建的数据类别(表),1表示插入的数据的主键,这里需要明确一个概念就是倒排索引

2.2查询商品

标准语法:

GET /index /type/id

# 2.2 查询一条数据

  • 标准语法:
## GET /index /type/id
1
  • 测试查询
## GET /goods/fruit/1
## 查询结果如下:
{
  "_index" : "goods",
  "_type" : "fruit",
  "_id" : "1",
  "_version" : 1,               ----------------表示当前的操作版本号
  "found" : true,
  "_source" : {                ------------------表示元数据,内部信息就是当前的这条记录信息
    "name" : "xiangjiao",
    "describe" : "haochi tian",
    "price" : 40,
    "producer" : "feilvbin",
    "tags" : [
      "xiangjiao",
      "haochi"
    ]
  }
}
## 注意:带下划线的都是es自带的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 2.3 修改商品

  • 标准语法
## POST /index/type/id/_update

{
	"doc": {
		"field": "vaule"
	}
}
1
2
3
4
5
6
7
  • 测试修改
## POST /goods/fruit/1/_update

{
  "doc": {
    "name":"yutou"
  }
}
1
2
3
4
5
6
7
  • 可以同时修改多条属性的值,值与值之间用”,”号间隔,还有一种非主流的写法也是可以的

# 2.4 删除操作

  • 标准语法:
## DELETE /index/type/id

DELETE /goods/fruit/1
1
2
3

# 03.es查询操作

# 3.1 全部查询

  • 标准语法:
## GET /index/type/_search

GET /goods/fruit/_search                     ## 查询所有
1
2
3
  • 查询结果说明

    • took:耗费了几毫秒
    • timed_out:是否超时,这里是没有
    • _shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard
    • hits.total:查询结果的数量,多少个document
    • hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
    • hits.hits:包含了匹配搜索的document的详细数据
  • 查询结果

{
  "took" : 1,                  ## 耗费了几毫秒
  "timed_out" : false,            ## 是否超时,这里是没有
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.6931472,
    "hits" : [
      {
        "_index" : "goods",
        "_type" : "fruit",
        "_id" : "1",
        "_score" : 0.6931472,
        "_source" : {
          "name" : "xiangjiao",
          "describe" : "haochi tian",
          "price" : 40,
          "producer" : "feilvbin",
          "tags" : [
            "xiangjiao",
            "haochi"
          ]
        }
      }
    ]
  }
}
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
27
28
29
30
31
32
33
34
35

# 3.2 条件查询

  • name=xiangjiao的
## 方法1
GET goods/fruit/_search/?q=name:xiangjiao         ## 查询名字为xiangjiao的
## 方法2
GET goods/fruit/_search
{
  "query": {
    "match": {
      "name": "xiangjiao"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11

# 3.3 按条件查询和排序

  • 查询 name=pingguo 使用价格进行正向排序
GET goods/fruit/_search
{
	"query": {
		"match": {
			"name": "pingguo"
		}
	},
	"sort": [
	  {
	    "price": {
	      "order": "desc"
	    }
	  }
	]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3.4 分页查询

  • 注意: 这里的检索结果是倒排索引,不是按照id排序的,是按照倒排的方式来进行检索的,再强调下,不是根据id排序
  • 每页显示两条数据
GET /goods/fruit/_search
{
	"query": {
		"match_all": {}
	},
	"from": 0,
	"size": 2
}
1
2
3
4
5
6
7
8

# 3.5 只显示指定字段

  • 检索出来的内容也就只包含了name和price字段的内容
GET /goods/fruit/_search
{
	"query": {
		"match_all": {}
	},
	"_source": ["name","price"], 
	"from": 0,
	"size": 2
}
1
2
3
4
5
6
7
8
9

# 3.6 多条件匹配查询

  • 查询 name=xiangjiao 并且 price=25
GET /goods/fruit/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "xiangjiao"
          }
        },
        {
          "match": {
            "price": "25"
          }
        }
      ]
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • 查询 name=xiangjiao 或者 price=45
GET /goods/fruit/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "xiangjiao"
          }
        },
        {
          "match": {
            "price": "45"
          }
        }
      ]
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 3.7 过滤查询

  • 注意:filter于must/must_not/should是并列关系,同属于bool的子属性

  • lt:小于, lte:小于等于, gt:大于, gte:大于等于

  • 查询 name=xiangjiao 或者 价格在 10~40之间的水果

GET /goods/fruit/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "xiangjiao"
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gte": 10,
            "lte": 40
          }
        }  
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 3.8 全文检索

  • 查询 name=pingguo 或者 name=xiangjiao的
GET /goods/fruit/_search
{
  "query": {
    "match": {
      "name": "pingguo xiangjiao"
    }
  }
}
1
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21
02.es介绍
04.中文分词检索

← 02.es介绍 04.中文分词检索→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式