【搜索引擎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博客

相关推荐
忆~遂愿19 分钟前
CANN ATVOSS 算子库深度解析:基于 Ascend C 模板的 Vector 算子子程序化建模与融合优化机制
大数据·人工智能
chian-ocean32 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
倒流时光三十年2 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
lili-felicity2 小时前
CANN异步推理实战:从Stream管理到流水线优化
大数据·人工智能
2501_933670793 小时前
2026 高职大数据专业考什么证书对就业有帮助?
大数据
xiaobaibai1533 小时前
营销自动化终极形态:AdAgent 自主闭环工作流全解析
大数据·人工智能·自动化
星辰_mya3 小时前
Elasticsearch更新了分词器之后
大数据·elasticsearch·搜索引擎
xiaobaibai1533 小时前
决策引擎深度拆解:AdAgent 用 CoT+RL 实现营销自主化决策
大数据·人工智能
悟纤3 小时前
学习与专注音乐流派 (Study & Focus Music):AI 音乐创作终极指南 | Suno高级篇 | 第33篇
大数据·人工智能·深度学习·学习·suno·suno api