分布式搜索--elasticsearch

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 分布式搜索--elasticsearch

学习黑马- SpringCloud微服务技术栈项目的分布式搜索章节自行整理的笔记,方便日后的重构。

项目涉及技术

1.知识点是按照集数依次整理,方便日后回来查找。

2.考虑到不是固定的联网方式,时而WiFi,时而热点,配置静态IP会导致每次网络变更后都需要重新配置,所以虚拟机使用的动态路由,当需要运行相关程序时,IP变化,只需要修改测试时初始化的RestHighLevelClient即可。

3.将代码路径列举主要是为后续审查。

4.RestClient操作索引库的代码路径E:\微服务\实用篇\day05-Elasticsearch01\资料\hotel-demo

实用篇

1.ES==elasticsearch–开源分布式搜索引擎。(P77)

2.elasticsearch:用来实现搜索、日志统计、分析、系统监控等功能。

3.elasticsearch+kibana、Logstash、Beats == elastic stack(ELK)。

4.elasticsearch–核心-存储、计算、搜索数据;可替换组件–kibana - 数据可视化;可替换组件–Logstash、Beats - 数据抓取

5.Lucene–Apache的搜索引擎类库-易扩展、高性能、基于倒排索引-提供搜索引擎核心API-仅支持Java语言。

6.数据库表–文档:每一条数据就是一个文档;词条:对文档中的内容分词,得到的词语就是词条。

7.正向索引–基于文档id创建索引;查询词条时必须先找到文档,然后判断是否包含词条 - 数据库的模糊查询-逐条查询判断。

8.倒排索引–对文档内容分词,对词条创建索引,并记录词条所在文档的id;查询是先根据词条查询文档id,而后获取文档。

9.ES–存储-面向文档存储的,文档数据会被序列化为JSON格式;索引-相同类型的文档的集合;映射-索引中文档的字段约束信息,类似表的结构约束。

10.MySQL与elasticsearch的概念对比、架构分析、关系。(P80)

11.安装部署es、kibana,需要先让es和kibana容器互联,部署单点es或kibana都是运行上传的tar包将数据导入,再运行docker命令,即可访问,具体的命令整理如下,外加注释,清晰明了。

# 创建网络
docker network create es-net
# 关闭虚拟机后,查看局域网络(已配置过,重启后不影响)
docker network ls
# 导入数据
docker load -i es.tar
# 运行docker命令,部署单点es
docker run -d \
  --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1
# 重启后,重启容器
docker start es
# 输入地址加端口即可访问es
http://192.168.226.139:9200
# 导入数据
docker load -i kibana.tar
# 运行docker命令,部署kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
# 重启后重启容器
docker start kibana
# 输入地址加端口即可访问kibana
http://192.168.226.139:5601

ps:(1)重启后只需要重启容器即可;(2)如果没有删除容器,重新运行docker命令部署会报名字重复错误;(3)如果不删除容器,想修改名称创建容器的话,需要在ess和kibana中的请求连接要同步,否则会报Kibana server is not ready yet的问题。


1.分词器的作用–创建倒排索引时对文档分词、用户搜索时,对输入的内容分词。(P83)

2.测试分词器、安装IK分词器。

# 在kibana中测试分词器
# english-默认分词器、standard-标准分词器
POST /_analyze
{
  "text": "好好学习,天天向上",
  "analyzer": "english"
}
# 安装ik分词器
# 查看数据卷elasticsearch的plugins目录位置
docker volume inspect es-plugins
# 到这个目录下
cd /var/lib/docker/volumes/es-plugins/_data
# 上传elasticsearch-analysis-ik-7.12.1.zip,然后解压
unzip elasticsearch-analysis-ik-7.12.1.zip
# 不太建议上面的方式,我试过发现启动会报错,后面改了很久都是报错,不知道哪里的配置文件被修改了,然后恢复快照重新来过
# 使用FileZillar直接传输Windows下解压的文件夹,结果是成功的
# 重启es容器
docker restart es
# 查看es日志
docker logs -f es
# 测试ik分词器
# IK分词器包含两种模式
# ik_smart:最少切分   --  被搜索的概论低-粗粒度
# ik_max_word:最细切分 -- 内存占用高-细粒度
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "好好学习天天向上,奥利给,噢噢点赞"
}
  1. 1.ik分词器-扩展词库、停用词库。

注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑

# 打开IK分词器config目录,在IKAnalyzer.cfg.xml配置文件内容添加
# 用户可以在这里配置自己的扩展字典
<entry key="ext_dict">ext.dic</entry>
#用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典
<entry key="ext_stopwords">stopword.dic</entry>
# 新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改
奥利给
# 在 stopword.dic 添加停用词
噢噢
# 修改过看效果,重启es容器即可
docker restart es
# 查看 日志
docker logs -f es


1.索引库操作(P85)

2.mapping属性–mapping是对索引库中文档的约束。

3.mapping属性包括:type:字段数据类型、index:是后创建索引-默认为true;analyzer:使用哪种分词器;properties:该字段的子字段。

4.type简单类型–字符串:text(可分词的文本)、keyword(精确值);数值:long、integer、short、byte、double、float;布尔:boolean;日期:date;对象:object。

5.创建索引库、查看索引库、删除索引库、禁止修改索引库。(P86)

# DSL语法
# 创建索引库名
PUT /索引库名
# 创建索引库的DSL语法例子
PUT /a
{
  "mappings": {
    "properties": {
      "info": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "name":{
        "type": "object",
        "properties": {
          "firstName": {
            "type": "keyword",
            "index": false
          }
        }
      }
    }
  }
}
# 查看索引库
GET /索引库名
# 删除索引库
DELETE /索引库名
# 索引库和mapping一旦创建就无法修改,但是可以添加新的字段
PUT /索引库名/_mapping
{
  "properties":{
    "新字段名":{
      "type":"integer"
    }
  }
}
  1. 1.文档操作–插入文档、查看文档、删除文档(P88)
  2. 2.修改文档–全量修改,会删除旧文档,添加新文档;局部修改,修改指定字段值。
# 插入文档
POST /索引库名/_doc/文档id
# 查看文档
GET /索引库名/_doc/文档id
# 删除文档
DELETE /索引库名/_doc/文档id
# 插入的DSL语法例子 -- 索引库名与上方创建相同
POST /a/_doc/1
{
  "info": "好好学习天天向上",
  "name": {
    "firstName": "小",
    "lastName": "盈"
  }
}
# 修改文档 -- 全量修改,会删除旧文档,添加新文档
PUT /索引库名/_doc/文档id
PUT /a/_doc/1
{
  "info": "好好学习天天向上",
  "email": "45543563.qq.com",
  "name": {
    "firstName": "小",
    "lastName": "盈"
  }
}
# 局部修改,修改指定字段值 -- 只能修改一个指段
POST /索引库名/_update/文档id
POST /a/_update/1
{
  "doc":{
    "email": "xiaoying@qq.com"
  }
}

1.RestClient操作索引库(P90)

2.导入hotel-demo,分析hotel的mapping数据结构-字段名、数据类型、是否参与搜索、是否分词、分词器。

3.tip:ES中支持两种地理坐标数据类型–geo_point:由维度和经度确定的一个点;geo_shape:有多个geo_point组成的复杂几何图形。

4.字段拷贝可以使用copy_to属性将当前字段拷贝到指定字段。

5.创建索引库、删除索引库、判断索引库是否存在。

6.索引库操作基本步骤:初始化RestHighLevelClient;创建XxxIndexRequest。xxx是Create、Get、Delete;准备DSL(Crete时需要);发送请求,调用RestHighLevelClient#indices().xxx()方法。

# 酒店的mapping
PUT /hotel
{
  "mappings":{
    "properties":{
      "id":{
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "ik_max_word",
        "copy_to": "all"
      },
      "address":{
        "type": "keyword",
        "index": false
      },
      "price":{
        "type": "integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword"
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword",
        "copy_to": "all"
      },
      "location":{
        "type": "geo_point"
      },
      "pic":{
        "type": "keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

1.RestClient操作文档–利用JavaRestClient实现文档的CRUD。(P95)

2.在数据库查询酒店数据,导入到hotel索引库,实现酒店数据的CRUD。

3.新增文档-index、根据id查询文档-get、根据id修改文档-update、根据id删除文档-delete。

4.文档操作的基本步骤:初始化RestHighLevelClient;创建XxxRequest;准备参数(Index和Update时需要);发送请求,调用RestHighLevelClient#.xxx()方法;解析结果(Get时需要)。

5.利用JavaRestClient批量导入酒店数据到ES。

->微服务技术栈分布式搜索课程视频

https://www.bilibili.com/video/BV1LQ4y127n4?p=77&vd_source=d3e01a57b1e96968088fe21f334a1693

<-

记录每一个学习瞬间

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
5月前
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
221 0
|
5月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
144 0
|
9月前
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
244 3
|
9月前
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
319 1
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
203 2
|
2月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
109 0
|
3月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
24天前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
7月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
627 0
分布式爬虫框架Scrapy-Redis实战指南
|
18天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。

热门文章

最新文章