当前位置: 首页 > ai >正文

分布式搜索(Elasticsearch)深入用法

目录

数据聚合

聚合的种类

DSL实现聚合

桶聚合

度量聚合

RestAPI实现聚合

多条件聚合

自动补全

拼音分词器

自定义分词器

自动补全查询

实现搜索框自动补全

数据同步

数据同步思路分析

实现elasticsearch与数据库数据同步

集群

搭建ES集群

集群脑裂问题

集群故障转移

集群分布式存储

集群分布式查询


数据聚合

聚合的种类

聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类:

桶聚合:用来对文档做分组

           TermAggregation:按照文档字段值分组

           Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组

度量聚合:用以计算一些值,比如:最大值、最小值、平均值等

           Avg:求平均值

          Max:求最大值

          Min:求最小值

          Stats:同时求max、min、avg、sun等

管道聚合:其它聚合结果为基础做聚合

参与聚合的字段类型必须是:

keyword

数值

日期

布尔

DSL实现聚合

桶聚合

默认情况下,桶聚合会统计桶内的文档数量,记为_count,并且按照_count 降序排序。我们可以修改结果排序方式:

 默认情况下,桶聚合是对索引库的所有文档做聚合,我们可以限定要聚合的文档范围,只要添加query条件即可:

度量聚合

例如,我们要求获取每个品牌的用户评分的min、max、avg等值.

RestAPI实现聚合

聚合请求的构造

聚合结果的解析

多条件聚合

多条件聚合构建

结果解析

自动补全

拼音分词器

使用拼音分词

要实现根据字母做补全,就必须对文档按照拼音分词。插件:infinilabs/analysis-pinyin: 🛵 This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin.

下载完将压缩包解压到es的plugins目录即可

自定义分词器

Elasticsearch 中分词器(Analyzer)的组成包含三部分:

  1. Character Filters(字符过滤器)

    • 在 Tokenizer 之前对原始文本进行预处理。

    • 例如:删除特殊字符、替换字符(如将 & 替换为 and)。

  2. Tokenizer(分词器)

    • 将文本按照特定规则切割成词条(Term)。

    • 例如:

      • keyword:不分词,将整个文本作为一个词条。

      • ik_smart:智能切分(粗粒度分词)。

  3. Token Filters(词条过滤器)

    • 对 Tokenizer 输出的词条进行进一步处理。

    • 例如:大小写转换、同义词处理、拼音处理等。

我们可以在创建索引库时,通过setting来配置自定义的analyzer(分词器):

自定义分词器配置

拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用。

因此字段在创建倒排索引时应该用my_analyzer分词器;字段在搜索时应该使用ik__smart分词器;

自动补全查询

es提供了Completion Suggerter查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:

  参与补全查询的字段必须是completion类型。

  

字段的内容一般是用来补全的多个词条形成的数组

查询语法

实现搜索框自动补全

1.修改索引库,设置自定义拼音分词器

2.修改索引库的name、all字段,使用自定义分词器

3.索引库添加一个新字段suggestion,类型为completion 字段,使用自定义分词器

4.给实体类添加suggestion字段,内容包含所需要补词的内容

5.重新导入数据

RestAPI实现自动补全

结果解析

数据同步

数据同步问题分析

es中酒店数据来自于mysql数据库,因此mysql数据发生改变时,es也必须跟着改变,这个就是es与mysql之间的数据同步。

数据同步思路分析

方案一:同步调用

优点:实现简单,粗暴

缺点:耦合度高

方案二:异步通知

优点:低耦合,实现难度一般

缺点:依赖mq的可靠性

方案三:监听binlog

优点:完全接触服务间耦合

缺点:开启binlog增加数据库负担、实现复杂度高

实现elasticsearch与数据库数据同步

利用MQ实现mysql与es数据同步

步骤:

导入数据

声明exchange、queue、RoutingKey

完成数据库中增、删、改业务并完成消息发送

完成消息监听并且更新es中数据

导入MQ依赖

配置MQ

集群

ES集群结构

单机的es做数据存储,必然面临两个问题:海量的数据存储问题、单点故障问题。

海量数据存储问题:将索引库从逻辑上拆分为N个分片,存储到多个节点

单点故障问题:将分片数据在不同节点备份

搭建ES集群

利用docker容器模拟3个es的节点。

集群脑裂问题

集群故障转移

集群分布式存储

集群分布式查询

http://www.xdnf.cn/news/18119.html

相关文章:

  • 基于Python的宠物服务管理系统 Python+Django+Vue.js
  • 卫生许可证识别技术:通过OCR与NLP实现高效合规管理,提升审核准确性与效率
  • 传输层协议——UDP和TCP
  • 论文阅读:Prompt Optimization in Large Language Models
  • 传统概率信息检索模型:理论基础、演进与局限
  • 轻度娱乐浪潮下定制开发开源AI智能名片S2B2C商城小程序的机遇与策略
  • RNN(循环神经网络)和Transformer是处理自然语言处理(NLP)任务区别
  • 10.Ansible角色管理
  • 力扣2道dp
  • Rust 入门 生命周期-next2 (十九)
  • flask——4:请求与响应
  • Kubernetes(K8s)常用命令全解析:从基础到进阶
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
  • Disbursement on Quarantine Policy(概率、逆元计算期望)
  • 【深度学习】pytorch深度学习框架的环境配置
  • Ansible文件部署与大项目多主机管理
  • 学习嵌入式的第二十天——数据结构
  • redis-集成prometheus监控(k8s)
  • 实习两个月总结
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • 传统方式部署(RuoYi-Cloud)微服务
  • 像素风球球大作战 HTML 游戏
  • vben admin 下拉支持收索
  • 谷粒商城项目-P3简介-分布式基础概念
  • 牛津大学xDeepMind 自然语言处理(1)
  • Mysql——前模糊索引失效原因及解决方式
  • C++多线程编程深度解析【C++进阶每日一学】
  • 部署 HAProxy 高可用
  • 将 iPhone 连接到 Windows 11 的完整指南
  • 蛋糕销售管理系统设计与实现