ElasticSearch入门简介
发布日期:2021-05-08 23:31:03 浏览次数:15 分类:博客文章

本文共 3561 字,大约阅读时间需要 11 分钟。

ElasticSearch是基于Apache Lucene的分布式搜索引擎, 提供面向文档的搜索服务。本文以6.2.3版本为例介绍ElasticSearch的应用。

本文首先介绍ElasticSearch中的索引和文档的概念,并在系列的其它文章进行更进一步的介绍。

目录:

可以在下载压缩包, 在解压目录中执行bin/elasticsearch来启动服务, 或者使用包管理器来安装启动.

ES默认端口为9200, 本地启动ES后向http://localhost:9200发送GET请求可以查看ES的基本信息:

GET 'localhost:9200'{  "name" : "hiTUe19",  "cluster_name" : "elasticsearch_finley",  "cluster_uuid" : "cfKnyFL1Rx6URmrmAuMBFw",  "version" : {    "number" : "5.1.2",    "build_hash" : "c8c4c16",    "build_date" : "2017-01-11T20:18:39.146Z",    "build_snapshot" : false,    "lucene_version" : "6.3.0"  },  "tagline" : "You Know, for Search"}

ElasticSearch采用三层数据结构来管理数据:

  • 索引(index): 索引是最高层的数据结构,可以定义独立的搜索索引和分片存储策略
  • 类型(type): 每个index可以拥有多个type, 用于存储不同类型的文档
  • 文档:文档是最基本的数据结构,存储和搜索都是围绕文档展开的

ElasticSearch中的文档是一个Json对象,搜索的结果是文档的集合因此被称为面向文档的搜索。

与三层数据结构相对应,我们可以使用三个字段来唯一标识文档:

  • _index: 代表文档所在的索引。索引名必须小写, 不能以下划线开头, 不能包含逗号.
  • _type: 代表文档所在的类型集。type名可以为大小写, 不能以下划线开头, 不能包含逗号.
  • _id: 用于唯一标识某个type中的文档

空查询请求可以列出某个数据结构中所有文档:

  • 列出所有文档: GET /_search
  • 列出索引blog下的所有文档: GET /blog/_search
  • 列出类型/blog/user下的所有文档: GET /blog/user/_search

创建文档

IndexAPI可以用于创建文档:

$ POST 'localhost:9200/blog/user/'content-type: application/jsonbody:{  "id": 1,  "nickname": "finley"}response:{    "_index": "blog",    "_type": "user",    "_id": "AV5WoO0MdsHuOObNBTWU",    "_version": 1,    "result": "created",    "_shards": {        "total": 2,        "successful": 1,        "failed": 0    },    "created": true}

使用POST请求创建文档, 在url中指定_index_type, 在请求体中使用json格式提交文档数据。

_index_type不存在ES会自动创建。上述请求中文档的_id字段由ElasticSearch创建,我们也可以自己指定_id:

POST localhost:9200/blog/user/2/content-type: application/json{  "id": 2,  "nickname": "easy"}response:{    "_index": "blog",    "_type": "user",    "_id": "2",    "_version": 1,    "result": "created",    "_shards": {        "total": 2,        "successful": 1,        "failed": 0    },    "created": true}

访问文档

使用GET请求访问文档,需要提供_index, _type_id三个参数唯一标识文档。

GET localhost:9200/blog/user/2/response:{    "_index": "blog",    "_type": "user",    "_id": "2",    "_version": 2,    "found": true,    "_source": {        "id": 2,        "nickname": "easy"    }}

更新文档

因为修改文档后难以更新索引,因此ElasticSearch修改文档的操作是通过删除原文档后重新添加新文档来进行的。

使用IndexAPI对已存在的文档发送POST请求则会更新文档:

POST localhost:9200/blog/user/2/content-type: application/json{  "nickname": "easy",  "gender": "male"}response:{    "_index": "blog",    "_type": "user",    "_id": "2",    "_version": 2,    "result": "updated",    "_shards": {        "total": 2,        "successful": 1,        "failed": 0    },    "created": false}

注意_version, created, result字段显示文档已被更新。通过GET请求查看更新后的文档:

GET localhost:9200/blog/user/2/{  "_index": "blog",  "_type": "user",  "_id": "2",  "_version": 2,  "found": true,  "_source": {    "nickname": "easy2",    "gender": ”male“  }}

注意到原文档中的_id字段已经不见了,文档完全由我们发送的上一个POST请求定义。

修改文档也可以通过PUT方法:

PUT localhost:9200/blog/user/2/content-type: application/json{  "id": 2,  "nickname": "easy3"}{    "_index": "blog",    "_type": "user",    "_id": "2",    "_version": 3,    "result": "updated",    "_shards": {        "total": 2,        "successful": 1,        "failed": 0    },    "created": false}

再次通过GET请求确认文档已被修改:

GET localhost:9200/blog/user/2/{  "_index": "blog",  "_type": "user",  "_id": "2",  "_version": 3,  "found": true,  "_source": {    "id": 2    "nickname": "easy3",  }}

删除文档

删除文档需要发送DELETE请求:

DELETE localhost:9200/blog/user/2/response:{    "found": true,    "_index": "blog",    "_type": "user",    "_id": "2",    "_version": 4,    "result": "deleted",    "_shards": {        "total": 2,        "successful": 1,        "failed": 0    }}
上一篇:ElasticSearch聚合分析
下一篇:kafka 消息队列

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月16日 14时18分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

15个Python数据分析实用技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2023-01-24
15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2023-01-24
1分钟学会在Linux下模拟网络延迟 2023-01-24
200款免费的AI工具汇总 2023-01-24
2023年失业的你明白了什么道理? 2023-01-24
00后整顿职场?公司测试岗却新来了个00后卷王,3个月薪资干到20K... 2023-01-24
2023应届毕业生找不到工作很焦虑怎么办? 2023-01-24
2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2023-01-24
2023网络安全现状,一个(黑客)真实的收入 2023-01-24
2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2023-01-24
2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
00后才是内卷之王,被卷的头皮发麻.... 2023-01-24
2024届秋招让我(985本硕)直接破防,感觉书读了这么久结果毫无意义,读书就只为了读书,我该怎么办? 2023-01-24
2024年专业介绍||现代通信技术,从零基础到精通,收藏这篇就够了! 2023-01-24
2024年为什么越来越多的人选择转行网络安全?零基础入门到精通,收藏这篇就够了 2023-01-24
2024年从零学习AI和深度学习Transformer的路线图(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
006从零开始学Python—自定义函数 2023-01-24
2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了! 2023-01-24