热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   根域文章 -   正文

ES中基本概念

zhiliaoadmin
2021-04-08 14:33:17
0

ES中基本概念

1、关系型数据库和ES对比

| Relational DB | Elasticsearch | | ------------------ | --------------- | | 数据库(database) | 索引(indices) | | 表(tables) | 类型(types) | | 行(一条记录)(rows) | 文档(documents) | | 字段(columns) | 属性(fields) |

2、接近实时(NRT Near Real Time )

Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)

3、索引(index)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的)并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字索引类似于关系型数据库中Database 的概念。在一个集群中,如果你想,可以定义任意多的索引。

4、类型(type)

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数 据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可 以为评论数据定义另一个类型。类型类似于关系型数据库中Table的概念。

NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用,但是不推荐,在7~8.x版本中彻底移除一个索引中创建多个类型

5、映射(Mapping)

Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema,用于定义一个索引(index)中的类型(type)的数据的结构。 在ES中,我们可以手动创建type(相当于table)和mapping(相关与schema),也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。 mapping中主要包括字段名、字段数据类型和字段索引类型

6、文档(document)

一个文档是一个可被索引的基础信息单元,类似于表中的一条记录。比如,你可以拥有某一个员工的文档,也可以拥有某个商品的一个文档。文档以采用了轻量级的数据交换格式JSON(Javascript Object Notation)来表示。

7、ES 常用命令

7.1、索引操作

我们先使用命令行的方式 curl 发送请求:

查看ES服务健康状态:

curl -X GET "ip地址:9200/_cat/health?v"

在这里插入图片描述

查看ES服务中的节点:

curl -X GET "ip地址:9200/_cat/nodes?v

在这里插入图片描述

查看ES服务中的所有索引:

curl -X GET "ip地址:9200/_cat/indices?v"

在这里插入图片描述

新增索引:

在这里插入图片描述

删除索引:

在这里插入图片描述

从上面我们也能发现,每次使用 curl 去手动输入请求ES 服务不太方便,所以我们用 Postman 请求模拟工具来替代手动输入!

新建索引:

image-20210312180022167

新建文档并指定id:

PUT IP地址:9200/myindex/_doc/1

image-20210312180013534

根据id查询数据:

GET IP地址:9200/myindex/_doc/1

image-20210312180001013

根据id修改数据:

PUT IP地址:9200/myindex/_doc/1

修改数据和新建一个文档一样,都是自定id 然后PUT 提交数据:

image-20210312175950285

根据id删除数据:

DELETE IP地址:9200/myindex/_doc/1

image-20210312175935668

7.2 索引搜索

为了搜索展示方便,先想ES 中添加一些数据:

java PUT IP 地址:9200/myindex/_doc/1 { "title":"海贼王", "content":"船长是路飞,副船长是索隆~" } PUT IP 地址:9200/myindex/_doc/2 { "title":"火影忍者", "content":"七代火影是鸣人,八代火影是木叶丸~" } PUT IP 地址:9200/myindex/_doc/3 { "title":"一拳超人", "content":"主角是埼玉,配角是杰诺斯~" } PUT IP 地址:9200/myindex/_doc/4 { "title":"进击的巨人", "content":"人类最牛的是兵长,巨人最菜的是男主~" } PUT IP 地址:9200/myindex/_doc/5 { "title":"名侦探柯南", "content":"男主是柯南,女主不确定~" } PUT IP 地址:9200/myindex/_doc/6 { "title":"海贼王路飞", "content":"路飞是要成为海贼我的男人~" } PUT IP 地址:9200/myindex/_doc/7 { "title":"路飞的果实能力", "content":"路飞是吃了橡胶果实的男人~" }

搜索全部

GET IP地址:9200/myindex/_search

在这里插入图片描述

返回结果:

java { "took": 1033, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 7, "relation": "eq" }, "max_score": 1.0, "hits": [ { "_index": "myindex", "_type": "_doc", "_id": "5", "_score": 1.0, "_source": { "title": "名侦探柯南", "content": "男主是柯南,女主不确定~" } }, { "_index": "myindex", "_type": "_doc", "_id": "4", "_score": 1.0, "_source": { "title": "进击的巨人", "content": "人类最牛的是兵长,巨人最菜的是男主~" } }, { "_index": "myindex", "_type": "_doc", "_id": "3", "_score": 1.0, "_source": { "title": "一拳超人", "content": "主角是埼玉,配角是杰诺斯~" } }, { "_index": "myindex", "_type": "_doc", "_id": "2", "_score": 1.0, "_source": { "title": "火影忍者", "content": "七代火影是鸣人,八代火影是木叶丸~" } }, { "_index": "myindex", "_type": "_doc", "_id": "1", "_score": 1.0, "_source": { "title": "海贼王", "content": "船长是路飞,副船长是索隆~" } }, { "_index": "myindex", "_type": "_doc", "_id": "6", "_score": 1.0, "_source": { "title": "海贼王路飞", "content": "路飞是要成为海贼我的男人~" } }, { "_index": "myindex", "_type": "_doc", "_id": "7", "_score": 1.0, "_source": { "title": "路飞的果实能力", "content": "路飞是吃了橡胶果实的男人~" } } ] } }

根据单个条件搜索

GET IP地址:9200/myindex/_search?q=title:海贼王

或者

GET IP地址:9200/myindex/_search?q=content:路飞

image-20210312175921187

返回结果:

java { "took": 5, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 1.7349373, "hits": [ { "_index": "myindex", "_type": "_doc", "_id": "1", "_score": 1.7349373, "_source": { "title": "海贼王", "content": "船长是路飞,副船长是索隆~" } }, { "_index": "myindex", "_type": "_doc", "_id": "6", "_score": 1.6770141, "_source": { "title": "海贼王路飞", "content": "路飞是要成为海贼我的男人~" } }, { "_index": "myindex", "_type": "_doc", "_id": "7", "_score": 1.6770141, "_source": { "title": "路飞的果实能力", "content": "路飞是吃了橡胶果实的男人~" } } ] } }

根据多个条件搜索

GET IP地址:9200/myindex/_search

在这里插入图片描述

java { "query":{ // 多个匹配 "multi_match":{ // 查询条件为 路飞 "query":"路飞", // 从title 和 content 字段中匹配是否存在 路飞 的数据 "fields":["title","content"] } } }

返回结果:

```java

{ "took": 32, "timedout": false, "shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "maxscore": 2.2700202, "hits": [ { "index": "myindex", "type": "doc", "id": "6", "score": 2.2700202, "source": { "title": "海贼王路飞", "content": "路飞是要成为海贼我的男人~" } }, { "index": "myindex", "type": "doc", "id": "7", "score": 1.9412584, "source": { "title": "路飞的果实能力", "content": "路飞是吃了橡胶果实的男人~" } }, { "index": "myindex", "type": "doc", "id": "1", "score": 1.7349373, "_source": { "title": "海贼王", "content": "船长是路飞,副船长是索隆~" } } ] } } ```


大家都在看

java中++a和a++有什么区别?a++和++...

2021-04-08 浏览次数:0

W3C是什么意思?w3c是用来干嘛的

2021-04-08 浏览次数:0

小白学前端一般学多久?零基础菜鸟的学成之路

2021-04-08 浏览次数:0

技术支持容易被淘汰吗:身处变革之中,如何避免被淘...

2021-04-08 浏览次数:0

java开发培训课程主要有哪些内容?

2021-04-08 浏览次数:0

java学习路线-2021超详细java学习干货

2021-04-08 浏览次数:0
最新资讯