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

相关推荐
追随远方1 小时前
Android OpenSL ES 音频播放完整实现指南
android·elasticsearch·音视频
数据与人工智能律师1 小时前
当机床开始“思考”,传统“制造”到“智造”升级路上的法律暗礁
大数据·网络·算法·云计算·区块链
摘星编程2 小时前
华为云Flexus+DeepSeek征文 | 模型即服务(MaaS)安全攻防:企业级数据隔离方案
大数据·人工智能·安全·华为云·deepseek
木鱼时刻3 小时前
从大数据到大模型:我们是否在重蹈覆覆辙
大数据
liuze4083 小时前
VMware虚拟机集群上部署HDFS集群
大数据·hadoop·hdfs
BAGAE3 小时前
使用 Flutter 在 Windows 平台开发 Android 应用
android·大数据·数据结构·windows·python·flutter
TechubNews4 小时前
为何京东与蚂蚁集团竞相申请稳定币牌照?
大数据·人工智能
成长之路5148 小时前
【面板数据】中国与世界各国新能源汽车进出口数据-分类别与不分类别(2017-2024年)
大数据·汽车
说私域8 小时前
传统企业数字化转型:以定制开发开源 AI 智能名片 S2B2C 商城小程序源码为核心的销售环节突破
大数据·人工智能·开源
G皮T13 小时前
【Elasticsearch】正排索引、倒排索引(含实战案例)
大数据·elasticsearch·搜索引擎·kibana·倒排索引·搜索·正排索引