【搜索引擎2】实现API方式调用ElasticSearch8接口

1、理解ElasticSearch各名词含义

ElasticSearch对比Mysql

Mysql数据库 Elastic Search
Database 7.X版本前有Type,对比数据库中的表,新版取消了
Table Index
Row Document
Column mapping

Elasticsearch是使用Java开发的,8.1版本的ES需要JDK17及以上版本;es默认带有JDK,如果安装es环境为java8,则会默认使用自带环境;

索引、文档、映射

索引index

跟我们常说的数据库索引没有任何关系,它其实相当于数据库里面存数据的表;

文档document

对应我们数据库的数据,即每行数据;

映射mappding

对应我们数据库的字段,自己设置的话需要设置字段类型,不设置在插入文档内容的时候es会按照字段内容设置字段类型;

分片、副本

分片shards

数据量特大,没有足够大的硬盘空间来一次性存储,且一次性搜索那么多的数据,响应跟不上,ES提供把数据进行分片存储,这样方便进行拓展和提高吞吐;

副本replicas

分片的拷贝,当主分片不可用的时候,副本就充当主分片进行使用

索引分片的备份,shard和replica一般存储在不同的节点上,用来提高高可靠性

ES默认为一个索引创建1个主分片和1个副本,在创建索引的时候使用settings属性指定,每个分片必须有零到多个副本

注意:索引一旦创建成功,主分片primary shard数量不可以变(只能重建索引),副本数量可以改变

正排索引、倒排索引

  • 正排索引 (Forward Index )

    • 指将文档的内容按照文档的顺序进行索引,每个文档对应一个索引条目,包含了文档的各个字段的内容
    • 正排索引的优势在于可以快速的查找某个文档里包含哪些词项。但是 正排不适用于查找包含某个词项的文档有哪些

倒排索引(Inverted Index)

  • 根据关键词构建的索引结构,记录了每个关键词出现在哪些文档或数据记录中,适用于全文搜索和关键词检索的场景

  • 它将文档或数据记录划分成关键词的集合,并记录每个关键词所出现的位置和相关联的文档或数据记录的信息

2、默认分词及IK分词区别演示

使用es自带分词器对内容进行分词

使用ik-smart进行分词

使用ik_max_word进行分词

|---------------------|-----------------------------|
| 分词模式 | 特点 |
| es默认standard | 对中文按照一个一个字进行分词 |
| ik智能分词ik_samrt | 按照中文词组进行分词,不会重复对单个文字进行分词 |
| ik最小颗粒分词ik_max_word | 除了对词组进行分词外,还会对单个文字,及多词组进行分词 |

理解完分词模式后,我们在插入文档的时候是可以测试文档默认使用了哪种分词;在我的测试结果中,集成IK的ES默认使用的是ik_max_word;

3、索引及映射操作

索引常用接口:

接口名称 请求方式 接口地址 请请求参数 请求结果
查看所有索引 GET /* 索引列表,没有数据返回{}
创建索引 PUT /index_name { "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "properties": { "id": { "type": "keyword" }, "createTime": { "type": "date" }, "name": { "type": "text" } } } } 请求成功返回 { "acknowledged": true, "shards_acknowledged": true, "index": "file" }
是否存在 HEAD /index_name 200索引存在 404索引不存在
获取索引 GET /index_name 索引信息
更新索引设置 PUT /index_name { "settings": { "number_of_replicas": 2 } }
删除索引 DELETE /index_name { "acknowledged": true }

mapping无法后面进行单独设置,或者插入文档的时候es自动识别进行填入默认类型;

4、文档操作("/_doc"代替之前版本type,固定写法)
接口名称 请求方式 接口地址 请请求参数 请求结果
查询文档 GET /index_name/_doc/1
新增文档指定ID PUT /index_name/_doc/1 { "id":5555, "name":"小滴课堂短链平台", "createDate":"20240311" }
新增文档不指定ID POST /index_name/_doc { "id":5555, "name":"小滴课堂短链平台", "createDate":"20240311" }
修改文档 PUT/POST /index_name/_doc/1 { "id":5555, "name":"小滴课堂", "createDate":"20240312" }
删除文档 DELETE /index_name/_doc/1

文档存储文件的类型为JSON;文档ID与我们参数的id不是同一个参数,文档ID类似于mysql设置了一个自增ID,我们在插入数据的时候可传值,也可不传值;

5、内容搜索

搜索接口:GET /index_name/_search

请求参数:name为我们自己的字段,这里可以根据自己字段进行调整

复制代码
{
    "query": {
        "match": {
            "name": "听取"
        }
    }
}

返回字段解释:

复制代码
字段解释
  took字段表示该操作的耗时(单位为毫秒)。
  timed_out字段表示是否超时。
  hits字段表示搜到的记录,数组形式。
  total:返回记录数,本例是1条。
  max_score:最高的匹配程度,本例是1.0

关于es类型较多,后续单独出一篇文章进行记录

6、参考文章

ElasticSearch8.X入门教程:ElasticSearch8.X入门教程_elasticsearch 8.x 学习-CSDN博客

相关推荐
若兰幽竹14 分钟前
【Spark分析HBase数据】Spark读取并分析HBase数据
大数据·spark·hbase
R²AIN SUITE34 分钟前
金融合规革命:R²AIN SUITE 如何重塑银行业务智能
大数据·人工智能
绿算技术2 小时前
“强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
大数据·人工智能·智能家居
只因只因爆3 小时前
spark的缓存
大数据·缓存·spark
Leo.yuan3 小时前
3D 数据可视化系统是什么?具体应用在哪方面?
大数据·数据库·3d·信息可视化·数据分析
只因只因爆4 小时前
spark小任务
大数据·分布式·spark
cainiao0806054 小时前
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
java·大数据·开发语言
End9287 小时前
Spark之搭建Yarn模式
大数据·分布式·spark
我爱写代码?7 小时前
Spark 集群配置、启动与监控指南
大数据·开发语言·jvm·spark·mapreduce
TDengine (老段)7 小时前
什么是物联网 IoT 平台?
大数据·数据库·物联网·时序数据库·tdengine·涛思数据