ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ES 增删改查 批量操作

2021-10-13 14:02:50  阅读:150  来源: 互联网

标签:oldboyedu http 9200 elk101 改查 增删 POST com ES


ES的基础操作

索引管理

创建索引

创建索引不带请求体
	PUT		http://elk101.oldboyedu.com:9200/python		#直接搜索
创建索引带请求体
	PUT	http://elk101.oldboyedu.com:9200/python-4
{
    "settings":{
        "index":{
            "number_of_replicas":1,		#副本
            "number_of_shards":5		#分片
        }
    }
}

查看索引(GET)

查看所有:
	GRT	http://elk101.oldboyedu.com:9200/_cat/indices?v
判断索引是否存在,返回200存在,反之不存在:
	HEAD	http://elk101.oldboyedu.com:9200/python	 	

删除索引(DELETE)

删除单个索引:
	DELETE	http://elk101.oldboyedu.com:9200/health_products
批量删除索引:
	DELETE	http://elk101.oldboyedu.com:9200/python-*

创建索引别名(aliases)

为一个索引创建别名:
POST	http://elk101.oldboyedu.com:9200/_aliases
	{
    "actions":[
        {
        "add":{"index":"oldboyedu","alias":"oldboy"}
        }
    ]
}
为多个索引创建别名:
POST	http://elk101.oldboyedu.com:9200/_aliases
{
    "actions":[
        {
        "add":{"index":"python","alias":"oldboy"}
        },
        {
        "add":{"index":"linux75","alias":"oldboy2"}
        }
    ]
}
为一个索引创建多个别名:
POST	http://elk101.oldboyedu.com:9200/_aliases
{
    "actions":[
        {
        "add":{"index":"oldboyedu","alias":"oldboy"}
        },
        {
        "add":{"index":"oldboyedu","alias":"oldboy213"}
        }
    ]
}

关闭索引(_close)

关闭指定索引:
	POST	http://elk101.oldboyedu.com:9200/linux75/_close
											  索引
批量关闭索引:
	POST	http://elk101.oldboyedu.com:9200/linux75-2020*/_close

打开索引(_open)

打开指定索引:
	POST	http://elk101.oldboyedu.com:9200/linux75/_open
批量打开索引:
	POST	http://elk101.oldboyedu.com:9200/linux75-2020*/_open

文档管理

创建文档

添加文档:
POST	http://elk101.oldboyedu.com:9200/linux/_doc
{
	"title":" 养生堂胶原蛋白肽15条/盒 (深海鳕鱼胶原蛋白肽)",
	"price":98.90,
	"brand":"养生堂",
	"shop":"养生堂京东自营旗舰店",
	"weight":"390.00g",
	"number":"539378",
	"users":"通用",
	"item":"https://item.jd.com/539378.html"
}
添加文档(定义id字段)
POST	http://elk101.oldboyedu.com:9200/linux/_doc/10101
{
    "title":"苹果(Apple)MacBook Air 13.3英寸 笔记本电脑 【2020款商务灰】十代i7 16G 512G 官方标配 19点前付款当天发货",
    "price":10498.00,
    "brand": "苹果",
    "weight": "1.29kg",
    "item": "https://item.jd.com/10021130510120.html"
}
删除文档:
DELETE	http://elk101.oldboyedu.com:9200/linux/_doc/JVNUrnkBZMse5l4lHyEa



删除文档

DELETE	http://elk101.oldboyedu.com:9200/linux/_doc/JVNUrnkBZMse5l4lHyEa

修改文档

全局更新修改文档:
POST	http://elk101.oldboyedu.com:9200/linux/_doc/JVNUrnkBZMse5l4lHyEa
{
        "title": " 养生堂胶原蛋白肽15条/盒 (深海鳕鱼胶原蛋白肽)",
        "price": 1000,
        "brand": "养生堂",
        "shop": "养生堂京东自营旗舰店",
        "weight": "390.00g",
        "number": "539378",
        "users": "通用",
        "item": "https://item.jd.com/539378.html"
    
}
局部更新修改文档:(_update)
POST	http://elk101.oldboyedu.com:9200/linux/_update/JVNUrnkBZMse5l4lHyEa
{
    "doc":{
        "title": " 养生堂胶原蛋白肽15条/盒 (深海鳕鱼胶原蛋白肽)",
        "price": 122
    }
}

查看文档

基于文档的id进行查看:
GET	http://elk101.oldboyedu.com:9200/shonpping/_doc/2983
全查询:
GET	http://elk101.oldboyedu.com:9200/shonpping/_search

ES的DSL操作

条件查询

基于请求路径查询:
GET		http://elk101.oldboyedu.com:9200/shonpping/_search?q=brand:DELL
基于请求体查询:
POST/GET		http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "query":{
        "match":{					#匹配
            "brand":"Dell"
        }
    }
}

分页查询

from:	跳过的信息条数,数据条数的偏移量
size:	每页显示的信息条数
查询前20条数据:(默认查看10条数据)
POST	http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "size":20
}
查询后5条数据:
POST	http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "from":24			#跳过多少条数据
}
每页显示6条数据查询第5页数据:
POST	http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "from":24,
    "size":6
}
from算法:
	(页码值-1)*每页显示的数量
每页显示3条数据查询第一页数据:
POST	http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "from":0,
    "size":3
}
每页显示3条数据查询第10页数据:
POST	http://elk101.oldboyedu.com:9200/shonpping/_search?
{
    "from":27,
    "size":3
}
每页显示3条数据查询第5页数据:
http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "from":12,
    "size":3
}

查看返回数据的指定字段

查看返回数据的指定字段:
{
    "from":25,
    "size":5,
    "_source":["price","brand"]
}
查看返回数据的空字段:
{
    "from":25,
    "size":5,
    "_source":[""]
}

排序

根据商品的价格从小到大排序(升序):
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match":{
            "brand":"苹果"
        }
    },
    "_source":["title","price","brand"],
    "sort":{
        "price":{
            "order":"asc"
        }
    }
}
根据商品的价格从大到小的排序(降序):
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
	"query":{
		"match":{
			"brand":"苹果"
		}
	},
	"_source":["title","price","brand"],
    "sort":{
		"price":{
			"order":"desc"
		}
	}
}

多条件查询

格式:
{
	"query":{				#发起查询
		"bool":{			#判断语是否满足,布尔查询,也可以理解为多条件查询
	"should" / "must":{		#must必须匹配的条件,类似于and.should查询类似于or
				"match":{	#匹配
				
				}
			}
		}
	}
}
must查询.类似于and
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "brand": "华为"
                    }
                },
                {
                    "match": {
                        "price": 4699.00
                    }
                }
            ]
        }
    }
}
should查询,类似于or
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "brand": "华为"
                    }
                },
                {
                    "match": {
                        "brand":"苹果"
                    }
                }
            ]
        }
    }
}
must_not查询,类似取反
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match": {
                        "brand": "华为"
                    }
                },
                {
                    "match": {
                        "brand":"苹果"
                    }
                }
            ]
        }
    }
}
should查询,最少匹配
GET		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "brand": "华为"
                    }
                },
                {
                    "match": {
                        "brand": "苹果"
                    }
                },
                {
                    "match": {
                        "brand": "小米"
                    }
                },
                {
                    "match": {
                        "price": 4699
                    }
                }
            ],
            "minimum_should_match": 2
        }
    }
}

范围查询

查询低于1000的商品(小于lt,大于gt,小于等于le,大于等ge):
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "brand": "小米"
                    }
                }
            ],
            "filter": {
                "range": {
                    "price": {
                        "lt": 1000
                    }
                }
            }
        }
    }
}
查询大于3000小于5000的商品:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "brand": "小米"
                    }
                }
            ],
            "filter": {
                "range": {
                    "price": {
                        "lt":5000,
                        "gt":3000 
                    }
                }
            }
        }
    }
}

全文检索(全文进行查找)

全文检索:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match":{		#不是完全匹配
            "brand":"小苹米"
        }
    }
}
完全匹配:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match_phrase":{			#必须连体来,不可拆分,完全匹配
            "brand":"小米"
        }
    }
}

完全匹配

使用全文匹配进行对比:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match":{				#匹配的是单个字符,类似[]里边的或者
            "title":"英寸"
        }
    }
}
使用完全匹配进行对比:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match_phrase":{		#完全匹配,必须是"英寸"连在一起
            "title":"英寸"
        }
    }
}
例题:
大于3000小于10000的英短品种:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match_phrase":{
                        "brand":"英短"
                    }
                }
            ],
            "filter":{
                "range":{
                    "price":{
                        "gt":3000,
                        "lt":10000
                    }
                }
            }
        }
    }
}

语法高亮

语法高亮:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "match_phrase":{
            "title":"手机"
        }
    },
    "highlight":{
        "fields":{
            "title":{}
        }
    }
}

精确匹配查找(term trems)

使用term精确查找(只能匹配单个):
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "term":{
            "price":4699
        }
    }
}
使用terms精确查找(可以匹配多个):
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "terms":{
            "price":[4699,299,279,479]
        }
    }
}

查询包含指定字段的文档

查询包含指定字段的文档:
exists			#操作符,目标存在
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "exists":{
            "field":"brand"
        }
    }
}

过滤查询

过滤查询:
filter			#过滤
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "bool":{
            "filter":{
                "match":{
                    "brand":"Dell"
                }
            }
        }
    }
}

多词搜索

默认基于or操作符对某个字段进行多词搜索:
"operator":"and" 			#默认是or,
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "bool":{
            "must":{
                "match":{
                    "title":{
                        "query":"曲面"
                        "operator":"or"		#默认就是or
                    }
                }
            }
        }
    },
    "_source":[""],
    "highlight":{
        "fields":{
            "title":{}
        }
    }
}
基于and操作符对某个字段进行多词搜索:
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "bool":{
            "must":{
                "match":{
                    "title":{
                        "query":"曲面"
                        "operator":"and"
                    }
                }
            }
        }
    },
    "_source":[""],
    "highlight":{
        "fields":{
            "title":{}
        }
    }
}

权重案例

权重案例:
boost:10			#类似优先级, 优先显示
POST		http://elk101.oldboyedu.com:9200/shonpping/_search
{
    "query":{
        "bool":{
            "must":{
                "match":{
                    "title":{
                        "query":"小米",
                        "operator":"and"
                    }
                }
            },
            "should":[
                {
                    "match":{
                        "title":{
                            "query":"防水",
                            "operator":"and"
                        }
                    }
                },
                {
                    "match":{
                        "title":{
                            "query":"黑色",
                            "operator":"and",
                            "boost":10
                        }
                    }
                }
            ]
        }
    }
}

ES的批量操作

批量插入

指定索引批量插入(常用):
POST	http://elk101.oldboyedu.com:9200/_bulk

{"create":{"_index":"linux"}}
{"name":"oldboy","address":"aaa"}
{"create":{"_index":"linux"}}
{"name":"oldgil","address":"bbb"}
指定索引及类型批量插入:
POST	http://elk101.oldboyedu.com:9200/_bulk
{"create":{"_index":"linux","_type":"_doc"}}
{"name":"oldboy2","address":"aaaw"}
{"create":{"_index":"linux","_type":"_doc"}}
{"name":"oldgil2","address":"bbbs"}
指定id批量插入:
POST	http://elk101.oldboyedu.com:9200/_bulk
{"create":{"_index":"linux","_type":"_doc","_id":111}}
{"name":"oldboy2","address":"aaaw"}
{"create":{"_index":"linux","_type":"_doc","_id":222}}
{"name":"oldgil2","address":"bbbs"}

批量查询

批量查询:	_mget

基于字段查询:
GET		http://elk101.oldboyedu.com:9200/linux/_search
{
    "query":{
        "match":{
            "name":"oldboy"
        }
    }
}
基于id查询:
GET		http://elk101.oldboyedu.com:9200/linux/_doc/111
批量获取数据:
GET		http://elk101.oldboyedu.com:9200/linux/_doc/_mget
{
    "ids":[111,222]
}

批量删除

批量删除:
POST	http://elk101.oldboyedu.com:9200/linux/_bulk
{"delete":{"_index":"linux","_id":111}}
{"delete":{"_index":"linux","_id":222}}

批量修改

批量修改:
POST	http://elk101.oldboyedu.com:9200/linux/_bulk
{"delete":{"_index":"linux","_id":111}}
{"create":{"_index":"linux","_type":"_doc","_id":333}}
{"name":"oldboy3","address":"aaaw"}

{"delete":{"_index":"linux","_id":222}}
{"create":{"_index":"linux","_type":"_doc","_id":444}}
{"name":"oldgil5","address":"bbbs"}

聚合查询

按照”price“字段计算所有商品的平均值:
        {
            "aggs":{  // 聚合操作
                "price_avg":{  // 该名称可以自定义,我习惯性基于相关字段起名称。
                    "avg":{  // 分组
                        "field":"price"  // 分组字段
                    }
                }
            },
            "size": 0 // 设置显示hits数据的大小,当size的值为0时,表示不查看原始数据!如果设置大于0,则显示指定的数据条数。如果设置为-1,则只显示10条,如果设置小于-1则报错!
        }
按照brand字段进行分组:
{
   "aggs":{  // 聚合操作
    	"brand_group":{  // 该名称可以自定义,我习惯性基于相关字段起名称。
    "terms":{  // 分组
              "field":"brand.keyword"  // 指定用于计算的相关字段,此处指定的时brand字段,但brand字段的fielddata默认值为false,因此此处我们需要写brand.keyword"
                    }
                }
            },
            "size": 0 // 设置显示hits数据的大小,当size的值为0时,表示不查看原始数据!如果设置大于0,则显示指定的数据条数。如果设置为-1,则只显示10条,如果设置小于-1则报错!
        }

标签:oldboyedu,http,9200,elk101,改查,增删,POST,com,ES
来源: https://blog.csdn.net/yuansheng730/article/details/120739581

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有