【搜索引擎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. 搜索引擎Lucene(Solr和Elasticsearch2

    2024-03-28 05:14:04       10 阅读
  2. springboot一个接口多个实现类的调用方式

    2024-03-28 05:14:04       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 05:14:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 05:14:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 05:14:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 05:14:04       20 阅读

热门阅读

  1. 当前项目下包的管理(添加和删除)

    2024-03-28 05:14:04       19 阅读
  2. uniapp保留两位小数,整数后面加.00

    2024-03-28 05:14:04       18 阅读
  3. docker基础(一)

    2024-03-28 05:14:04       18 阅读
  4. 机器学习和神经网络8

    2024-03-28 05:14:04       18 阅读
  5. vscode 系列文章目录 - c/c++插件配置头文件定义

    2024-03-28 05:14:04       20 阅读
  6. Springboot vue elementui 医院管理系统案例源码

    2024-03-28 05:14:04       19 阅读
  7. ZooKeeper 分布式锁的实现方法

    2024-03-28 05:14:04       20 阅读
  8. 【Web应用技术基础】CSS(3)——文本与文字样式

    2024-03-28 05:14:04       17 阅读
  9. 【前端学习——css篇】2.css选择器的优先级

    2024-03-28 05:14:04       23 阅读
  10. hive 、spark 、flink之想一想

    2024-03-28 05:14:04       19 阅读
  11. dfs (蓝桥备赛)

    2024-03-28 05:14:04       20 阅读