分布式搜索--elasticsearch

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 分布式搜索--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

<-

记录每一个学习瞬间

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
17天前
|
搜索推荐 开发者
如何在 Elasticsearch 中选择精确 kNN 搜索和近似 kNN 搜索
【6月更文挑战第8天】Elasticsearch 是一款强大的搜索引擎,支持精确和近似 kNN 搜索。精确 kNN 搜索保证高准确性但计算成本高,适用于对精度要求极高的场景。近似 kNN 搜索则通过牺牲部分精度来提升搜索效率,适合大数据量和实时性要求高的情况。开发者应根据业务需求和数据特性权衡选择。随着技术发展,kNN 搜索将在更多领域发挥关键作用。
29 4
|
4天前
|
存储 数据采集 负载均衡
Elasticsearch系列---搜索执行过程及scroll游标查询
Elasticsearch系列---搜索执行过程及scroll游标查询
|
1月前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
103 3
|
1月前
|
SQL 监控 搜索推荐
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
107 2
|
1月前
|
存储 机器学习/深度学习 API
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
134 0
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
|
1月前
|
人工智能 程序员 开发者
Elasticsearch 中文社区的转型后,搜索人怎么破局?
Elasticsearch 中文社区的转型后,搜索人怎么破局?
25 0
|
1月前
|
Java Maven 开发工具
【ElasticSearch 】IK 分词器安装
【ElasticSearch 】IK 分词器安装
44 1
|
1月前
|
Java Windows
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
152 0
|
12天前
Elasticsearch安装配置文件
Elasticsearch安装配置文件
15 0
|
1月前
|
存储 数据可视化 数据挖掘
【ElasticSearch】ElasticSearch安装
【ElasticSearch】ElasticSearch安装
37 2