笔记大纲
-
es索引index操作
- 查看索引
- 添加索引
- 删除索引
-
es文档document操作
- 新增文档
- 根据id查询
- 修改字段
- 删除document
- 搜索type
<TABLE>
全部数据 - 按条件查询全部(match_all)
- 按分词查询(match)
- 按分词子属性查询
- 按数组查询(match_phrase)
- 按关键字查询
- 按模糊(fuzzy)查询
- 过滤–查询后过滤
- 过滤–查询前过滤【推荐】
- 过滤–按范围过滤(filter-range)
- 排序(sort)
- 分页查询(from/size)
- 指定字段查询(_source)
- 默认高亮(highlight-
<em/>
) - 自定义高亮–粗体(
<b/>
) - 聚合(aggs-groupby_xx)
-
es类型type之mapping
es中保存的数据结构就是Json,这点我们需要注意!es数据的基本操作如下:
一、es索引index<database>
操作
(1)查看索引
GET /_cat/indices?v
//es 默认存在一个名为.kibana的索引
参数 | 描述 |
---|---|
health | green (集群完整) yellow (单点正常、集群不完整) red (单点不正常) |
status | 是否能使用 |
index | 索引名 |
uuid | 索引统一编号 |
pri | 主节点几个 |
rep | 从节点几个 |
docs.count | 文档数 |
docs.deleted | 文档被删了多少 |
store.size | 整体占空间大小 |
pri.store.size | 主节点占 |
(2)添加索引
PUT /movie_index
校验
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(3)删除索引
DELETE /movie_index
//只是逻辑删除
二、es文档document<row>
操作
查询用GET、创建、覆盖用PUT、修改用POST外加_update,注意细节!
(1)新增文档
新增文档就如同新增一条记录!如果没新建
index
或者type
,es 会自动创建!
PUT /movie_index/movie/1
{ "id":1,
"name":"operation red sea",
"doubanScore":8.5,
"actorList":[
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
PUT /movie_index/movie/2
{
"id":2,
"name":"operation meigong river",
"doubanScore":8.0,
"actorList":[
{"id":3,"name":"zhang han yu"}
]
}
PUT /movie_index/movie/3
{
"id":3,
"name":"incident red sea",
"doubanScore":5.0,
"actorList":[
{"id":4,"name":"zhang chen"}
]
}
(2)根据id查询
GET movie_index/movie/1
(3)修改字段
查看id为3初始数据
修改id为3中daoubanScore字段
POST movie_index/movie/3/_update
{
"doc": {
"doubanScore":7.0
}
}
查看id为3修改后数据
(4)删除document
DELETE movie_index/movie/3
(5)搜索type<TABLE>
全部数据
GET movie_index/movie/_search //查询所有数据
(6)按条件查询全部(match_all)
GET movie_index/movie/_search
{
"query":{
"match_all": {}
}
}
(7)按分词查询(match)
GET movie_index/movie/_search
{
"query":{
"match": {"name":"red"}
}
}
(8)按分词子属性查询
GET movie_index/movie/_search
{
"query":{
"match": {"actorList.name":"zhang"}
}
}
(9)按数组查询(match_phrase)
按短语查询,不再利用分词技术,直接用短语在原始数据中匹配!
GET movie_index/movie/_search
{
"query":{
"match_phrase": {"name":"operation red"} //两个字段
}
}
(10)按关键字查询
应用教少,搜索平台一般都是分词查询!
(11) 按模糊(fuzzy)查询
fuzzy只适合英文,中文查询复杂!!!
GET movie_index/movie/_search
{
"query":{
"fuzzy": {"name":"rad"} //red写错成rad进行搜索
}
}
(12)过滤–查询后过滤
GET movie_index/movie/_search
{
"query":{
"match": {"name":"red"}
},
"post_filter":{
"term": {
"actorList.id": 3
}
}
}
(13)过滤–查询前过滤【推荐】
GET movie_index/movie/_search
{
"query":{
"bool":{
"filter":[ {"term": { "actorList.id": "1" }},
{"term": { "actorList.id": "3" }}
],
"must":{"match":{"name":"red"}}
}
}
}
(14)过滤–按范围过滤(filter-range)
gt表示大于,lt表示小于,gte表示大于等于,lte表示 小于等于
GET movie_index/movie/_search
{
"query": {
"bool": {
"filter": {
"range": {
"doubanScore": {"gte": 8}
}
}
}
}
}
(15)排序(sort)
sort关键字,排序方式:desc降序、asc升序!
GET movie_index/movie/_search
{
"query":{
"match": {"name":"red sea"}
}
, "sort": [
{
"doubanScore": {
"order": "desc"
}
}
]
}
(16)分页查询(from/size)
查询所有数据,from(索引从0开始)size(每页查询记录数1条),document有3条,应分3页。
GET movie_index/movie/_search
{
"query": { "match_all": {} },
"from": 0,
"size": 1
}
(17)指定字段查询(_source)
相当于select id ,name from table;
GET movie_index/movie/_search
{
"query": { "match_all": {} },
"_source": ["name", "doubanScore"]
}
(18)默认高亮(highlight-<em/>
)
GET movie_index/movie/_search
{
"query":{
"match": {"name":"red sea"}
},
"highlight": {
"fields": {"name":{} }
}
}
(19)自定义高亮–粗体(<b/>
)
(20)聚合(aggs-groupby_xx)
分组统计,效率比较低!
aggs设定规则;groupby_actor聚合规则名,不能重复;field表示字段;追加keyword字段
统计每个演员共参演了多少部电影
GET movie_index/movie/_search
{
"aggs": {
"groupby_actor": {
"terms": {
"field": "actorList.name.keyword"
}
}
}
}
每个演员参演电影的平均分是多少,并按评分排序
GET movie_index/movie/_search
{
"aggs": {
"groupby_actor_id": {
"terms": {
"field": "actorList.name.keyword" ,
"order": {
"avg_score": "desc"
}
},
"aggs": {
"avg_score":{
"avg": {
"field": "doubanScore" //平均分doubanScore计算
}
}
}
}
}
}
三、es类型type<table>
mapping
type中的字段的数据类型由mapping定义,没设定mapping系统会自动根据一条数据来推断数据格式;同时我们还可以手动定义,但是只能对新加的、没有数据的字段进行定义。一旦有了数据就无法再做修改了! 默认只有text会进行分词,keyword是不会分词的字符串!
数据 | 推算数据格式 |
---|---|
true/false | boolean |
6666 | long |
666.6 | double |
“2019.11.07” | date |
“hello world” | text +keyword |
GET movie_index/_mapping/movie //type可以看做table,查看表结构
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!