索引操作
url 格式:
{host}:{port}/{indexname}
创建索引
以 put 方式请求 127.0.0.1:9200/blog
,body 内容如下:
{
"mappings":{
"article":{
"properties":{
"id":{
"type":"long",
"store":true
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
},
"content":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
}
}
}
}
}
响应:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "blog"
}
刷新 head 服务页面,会发现已经创建了 blog 索引库,并且在创建索引库的同时设置了 mappings 信息。查看索引信息如下:
删除索引库
如果要删除 blog 索引库,只需要以 delete 方式发送请求到 127.0.0.1:9200/blog
即可,无请求体,响应如下:
{
"acknowledged": true
}
文档编辑操作
url 格式:
{host}:{port}/{indexname}/{typename}/{id}
添加文档
重新执行创建索引库操作,在创建索引库 blog 时已经指定了一个 type 信息即 article,所以添加文档时也应对应 article 的属性。
以 post 方式发送请求到 127.0.0.1:9200/blog/article/1
,请求体如下:
{
"id":1,
"title":"测试标题",
"content":"测试内容"
}
响应如下:
{
"_index": "blog",
"_type": "article",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
该操作会添加一条 id 为 1 的 article 文档。
注:可以看到该条数据有两个 id,后面一个 id 是我们创建索引库时设置 mapping 的字段,对应请求体 json 的 id,而前面的 _id 是 ES 内部维护记录的标识,对应 url 中的 id 部分。
修改文档
修改操作实际上和添加相同,发送 post 请求到 127.0.0.1:9200/blog/article/1
即可,请求体如下:
{
"id":1,
"title":"测试修改标题",
"content":"测试修改内容xxxx"
}
响应:
{
"_index": "blog",
"_type": "article",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
注:ES 内部如果发现已经存在了相同 _id 的文档,则就是修改操作,如果不存在,则就是添加操作。
删除文档
以删除刚刚创建的那条数据为例,发送一个 delete 请求到 127.0.0.1:9100/blog/article/1
即可,无请求体,响应如下:
{
"_index": "blog",
"_type": "article",
"_id": "1",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
注意,这里 url 中的 1 对应的是 _id 的值。
文档查询操作
为方便后面演示,添加一些测试数据如下:
根据id查询
url 格式:
{hostname}:{port}/{indexname}/{typename}/{id}
以 get 方式发送请求到 127.0.0.1:9200/blog/article/5
,即查询 _id 为 5 的文档,响应如下:
{
"_index": "blog",
"_type": "article",
"_id": "5",
"_version": 1,
"found": true,
"_source": {
"id": 5,
"title": "硬核海军老爷子!7旬老海军深海区救女童,家长激动得3次跪谢",
"content": "波涛起伏的大海、海水中漂摇的“充气艇”、在海浪中扑腾的小女孩、奋力游泳逐渐接近孩子的老人……这是动人心魄又感人至深的一幕。近日,烟台73岁老人孙开疆在海水中奋力救起一名5岁落水女童的事情引发网友关注,视频发到抖音之后,点击和点赞达150多万,网友纷纷为这位老人点赞。但在退役很久依然军人本色不改的老兵孙开疆看来,这是一件很普通的事情,也是一件自己应该做的事情。 事发后的当晚,孙开疆写下了这样一段文字:我不是为救一个孩子而炫耀,我更注重的是呼唤……我呼唤舍己救人的社会主义核心价值,呼唤鲜红的军旗与人民的血肉相连,呼唤全社会尊老爱幼的 崇高美德……这是我献给八一建军节一份珍贵的礼物!。"
}
}
term 查询
url 格式:
{hostname}:{port}/{indexname}/{typename}/_search
term 查询除了要指定 url,还需要指定请求体。
以查询 blog
索引下 article
类型中文档属性 title
中包含 "在"
字的文档为例,以 get 方式发送请求到 127.0.0.1:9200/blog/article/_search
,请求体如下:
{
"query":{
"term":{
"title":"在"
}
}
}
响应如下:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.6866149,
"hits": [
{
"_index": "blog",
"_type": "article",
"_id": "4",
"_score": 0.6866149,
"_source": {
"id": 4,
"title": "港媒:北京没有掉进圈套,而自欺欺人每天在香港上演",
"content": "当前香港上空弥漫一股“揽炒”(粤语:玉石俱焚)之风。很多年轻人似乎不在乎安危与犯法,要与执法者抱着一起“与汝皆亡”。激进氛围像一种流行病,开始蔓延,但立刻暴露出幼稚的双重标准。一些专业人士也学街头斗士,戴上口罩抗议警察暴力,却不谴责动乱者对旅客施私刑,丢汽油弹烧伤警察。"
}
},
{
"_index": "blog",
"_type": "article",
"_id": "1",
"_score": 0.2876821,
"_source": {
"id": 1,
"title": "将经贸问题政治化在香港问题上做文章,这些拙劣行径注定失败",
"content": "锐评指出,这是赤裸裸地将经贸问题政治化,公然干涉中国内政,企图增加施压和遏制中国的筹码,用心极其险恶!彭斯副总统应该去补一补历史课,拿《中英联合声明》这份过时无效的文件干涉香港事务与中国内政,不仅让自己沦为国际笑柄,也令美国国家形象蒙羞。"
}
}
]
}
}
因目前使用的是标准分析器,对于中文是直接将每个汉字拆分为一个关键字,所以查询时只能根据单个汉字查询,否则是找不到结果的。
querystring 查询
该种查询方式与 term 查询的 url 格式相同,请求体不同。
querystring 查询是根据字符串查询,会先将字符串进行分词,然后用这些词去进行匹配查询。
以 get 方式发送请求体到 127.0.0.1:9200/blog/article/_search
,请求体如下:
{
"query":{
"query_string":{
"default_field":"title",
"query":"我没有不开心"
}
}
}
default_field:指定在哪个域进行查询。
query:查询的字符串。
响应:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1.3732297,
"hits": [
{
"_index": "blog",
"_type": "article",
"_id": "4",
"_score": 1.3732297,
"_source": {
"id": 4,
"title": "港媒:北京没有掉进圈套,而自欺欺人每天在香港上演",
"content": "当前香港上空弥漫一股“揽炒”(粤语:玉石俱焚)之风。很多年轻人似乎不在乎安危与犯法,要与执法者抱着一起“与汝皆亡”。激进氛围像一种流行病,开始蔓延,但立刻暴露出幼稚的双重标准。一些专业人士也学街头斗士,戴上口罩抗议警察暴力,却不谴责动乱者对旅客施私刑,丢汽油弹烧伤警察。"
}
},
{
"_index": "blog",
"_type": "article",
"_id": "3",
"_score": 0.2876821,
"_source": {
"id": 3,
"title": "50岁带仨娃,还能成功撬走世界首富,这女人不只是顶配版邓文迪",
"content": "大概一周前,在法国避暑天堂蓝色海岸,贝佐斯搭上传媒大亨大卫·格芬价值2亿美元的游艇,戴着Garrett Leight墨镜,趿拉着Prada凉拖,挽上新女朋友劳伦·桑切斯的手,吹着海风,品着鸡尾酒,逍遥自在地开启了度假模式 。"
}
}
]
}
}
使用 head 插件查询
head 插件给我们提供了更方便的可视化的查询工具。
评论区