码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ElasticSearch 实现分词全文检索 - 概述


    目录

    ElasticSearch 实现分词全文检索 - 概述
    ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装
    ElasticSearch 实现分词全文检索 - Restful基本操作
    ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
    ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
    ElasticSearch 实现分词全文检索 - 测试数据准备
    ElasticSearch 实现分词全文检索 - term、terms查询
    ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
    ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
    ElasticSearch 实现分词全文检索 - Scroll 深分页
    ElasticSearch 实现分词全文检索 - delete-by-query
    ElasticSearch 实现分词全文检索 - 复合查询
    ElasticSearch 实现分词全文检索 - filter查询
    ElasticSearch 实现分词全文检索 - 高亮查询
    ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
    ElasticSearch 实现分词全文检索 - 经纬度查询
    ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(suggest)
    ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码

    需求

    做一个类似百度的全文搜索功能
    image
    image

    所用的技术如下:

    • ElasticSearch
    • Kibana 管理界面
    • IK Analysis 分词器
    • SpringBoot

    全文检索流程

    image

    • 创建ES索引、设置需要分词查询的 field
    • 可以通过 canal 对 MySQL binlog 进行数据同步,或者 flink 或者 SpringBoot 直接往ES里添加数据
    • 根据业务需求,通过 SpringBoot 进行查询

    ElasticSearch 简介

    ES 是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于Restful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。

    Lucene:Lucene本身就是一个搜索引擎的底层
    分布式:ES主要是为了突出他的横向扩展能力。
    全文检索:将一段词语进行分词,并且将分出来的单个词语统一放到一个分词库中,在搜索时,根据关键字去分词库中检查,找到匹配的内容。(倒排索引)
    Restful 风格的WEB接口:操作ES很简单,只需要发送一个HTTP请求,并且根据请求方式的不同,携带参数,执行相应的功能。
    应用广泛:Github, wiki, gold man 用ES每天维护将近10TB的数据。

    ES 结构

    image

    索引

    ES的服务中,可以创建多个索引,每个索引默认被分成5个分片存储(提高查询效率、存储容量),每个分片至少有一个备份分片
    备份分片默认不会分担查询效率,当ES检索压力特别大的时候,备份分片才会帮助检索数据
    备份的分片必须放在不同的服务器中(集群)

    image

    类型

    索引可以分多个分版 ,每个分片中有多个type,ES版本不同,类型的创建也不同
    7.x 默认不再支持自定投索引类型(默认类型为_doc)
    image

    文档

    一个type又可以分多个 document 文档 (一个个文档,相当于RDB中的一行行数据),每个文档中有多个field属性
    一个MySQL有多个数据库,一个库中有多个表,一张表中存放着多行数据,每行数据中分多个列
    image

    列

    一个文档包括多个属性,相当于RDB中的字段
    image

    ES和Slor

    Slor 在查询死数据时(不能改变的数据,不增加、不减少),速度相对ES更快一些。但是数据如果是实时改变时,Solr的查询速度会降低很多,ES的查询效率基本没有变化。

    Solr搭建集群时,需要依赖Zookeeper来帮助管理。ES本身就支持集群的搭建,不需要第三方的介入

    Solr针对国内的中文文档不多,ES社区火爆,文档健全

    ES 对现在云计算和大数据支持特别好

    倒排索引

    将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中。
    当用户去查询数据时,会将用户的查询关键字进行分词
    然后去分词库中匹配内容,最终得到数据的ID标识
    根据ID标识去存放数据的位置拉取到指定的数据
    流程:

    • 查询:根据输入的关键字【我】,去分词库中检索内容
      结果:1、3
    • 根据分词库中检索到的ID,直接拉取指定数据结果
      1:我是谁
      3:我是中国人
      image
  • 相关阅读:
    MATLAB算法实战应用案例精讲-【人工智能】边缘计算(附python代码实现)
    PMP刷题小结2
    【控制】基于Matlab实现含最速跟踪微分器的自抗扰控制技术
    Class Semantics-based Attention for Action Detection CSA论文阅读笔记
    黑客(网络安全)技术自学——高效学习
    面试面经|java面试异常面试题
    stable-diffusion-webui中stability的sdv1.5和sdxl模型结构config对比
    day1-机器学习-回归问题
    【WSN路由】异构无线传感器网络分布式节能分簇算法的设计(DEEC)附Matlab代码
    基于jsp+mysql+Spring+mybatis的SSM旅游服务综合平台管理系统
  • 原文地址:https://www.cnblogs.com/vipsoft/p/17172542.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号