侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Elasticsearch(4)之客户端操作

zze
zze
2019-08-22 / 0 评论 / 0 点赞 / 633 阅读 / 9929 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

索引操作

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 信息。查看索引信息如下:

image.png

删除索引库

如果要删除 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 的值。

image.png

文档查询操作

为方便后面演示,添加一些测试数据如下:

image.png

根据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 插件给我们提供了更方便的可视化的查询工具。

term 查询

image.png

querystring 查询

image.png

0

评论区