1.正排索引和倒排索引
正排索引:
正排索引(Forward Index)是一种用于搜索引擎和文本检索系统的索引结构,它将文档中的每个单词都映射到该单词在文档中出现的位置。正排索引可以帮助快速定位、检索和渲染文档内容,但它需要消耗大量的磁盘空间来存储每个单词的位置信息。
倒排索引:
倒排索引(Inverted Index)是一种用于搜索引擎和文本检索系统的索引结构,它将每个单词都映射到包含该单词的所有文档。相比于正排索引,倒排索引需要消耗更少的存储空间,并能够快速地支持全文搜索和词项查询等功能。倒排索引通常用于处理大量文本数据,例如网页、新闻文章、电子书籍等。
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比:
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。
2.创建索引:
对比关系型数据库,创建索引就等同于创建数据库。
在 Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/shopping
请求后,服务器返回响应:
注意:put请求具有幂等性,只要发出了同样的请求,结果是一样的,你刚创建成功,在去创建就会出现如下问题:
注意post是没有幂等性的,俩次相同的操作,结果不一样,这个是不允许的:如下使用post:
注意:get是获取索引,put是创建索引,delete是删除索引
3.查询索引
查询上边创建的shopping索引:
查询当前创建的全部索引:
在 Postman 中,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/_cat/indices?v
这里请求路径中的_cat 表示查看的意思, indices 表示索引,所以整体含义就是查看当前 ES服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉.
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open shopping J0WlEhh4R7aDrfIc3AkwWQ 1 1 0 0 208b 208b
4.删除索引
5.文档创建
假设索引已经创建好了(put: http://127.0.0.1:9200/shopping),接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式
在 Postman 中,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc,请求体JSON内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
返回的结果:
{
"_index": "shopping",//索引
"_type": "_doc",//类型-文档
"_id": "ANQqsHgBaKNfVnMbhZYU",//唯一标识,可以类比为 MySQL 中的主键,随机生成
"_version": 1,//版本
"result": "created",//结果,这里的 create 表示创建成功
"_shards": {//
"total": 2,//分片 - 总数
"successful": 1,//分片 - 总数
"failed": 0//分片 - 总数
},
"_seq_no": 0,
"_primary_term": 1
}
注意,此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误 。
上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下, ES 服务器会随机生成一个。如果想要自定义唯一性标识,需要在创建时指定: http://127.0.0.1:9200/shopping/_doc/1,请求体JSON内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
返回结果如下:
此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT。
6.主键查询
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询在 Postman 中,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping/_doc/2 。
返回结果如下:
查找不存在的内容,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping/_doc/1001。
7.全查询
查看索引下所有数据,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping/_search。
返回结果如下:
8.