ElasticSearch 实现分词全文检索 - 概述
需求
做一个类似百度的全文搜索功能

所用的技术如下:
- ElasticSearch
- Kibana 管理界面
- IK Analysis 分词器
- SpringBoot
ElasticSearch 简介
ES 是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于Restful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。
Lucene:Lucene本身就是一个搜索引擎的底层
分布式:ES主要是为了突出他的横向扩展能力。
全文检索:将一段词语进行分词,并且将分出来的单个词语统一放到一个分词库中,在搜索时,根据关键字去分词库中检查,找到匹配的内容。(倒排索引)
Restful 风格的WEB接口:操作ES很简单,只需要发送一个HTTP请求,并且根据请求方式的不同,携带参数,执行相应的功能。
应用广泛:Github, wiki, gold man 用ES每天维护将近10TB的数据。
ES 结构

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

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

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

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

ES和Slor
Slor 在查询死数据时(不能改变的数据,不增加、不减少),速度相对ES更快一些。但是数据如果是实时改变时,Solr的查询速度会降低很多,ES的查询效率基本没有变化。
Solr搭建集群时,需要依赖Zookeeper来帮助管理。ES本身就支持集群的搭建,不需要第三方的介入
Solr针对国内的中文文档不多,ES社区火爆,文档健全
ES 对现在云计算和大数据支持特别好
倒排索引
将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中。
当用户去查询数据时,会将用户的查询关键字进行分词
然后去分词库中匹配内容,最终得到数据的ID标识
根据ID标识去存放数据的位置拉取到指定的数据

全文检索流程

- 创建ES索引、设置需要分词查询的 field
- 可以通过 canal 对 MySQL binlog 进行数据同步,或者 flink 或者 SpringBoot 直接往ES里添加数据
- 根据业务需求,通过 SpringBoot 进行查询
ElasticSearch 实现分词全文检索 - 概述的更多相关文章
- PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a) robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...
- ElasticSearch中文分词(IK)
ElasticSearch常用的很受欢迎的是IK,这里稍微介绍下安装过程及测试过程. 1.ElasticSearch官方分词 自带的中文分词器很弱,可以体检下: [zsz@VS-zsz ~]$ c ...
- 实战ELK(8) 安装ElasticSearch中文分词器
安装 方法1 - download pre-build package from here: https://github.com/medcl/elasticsearch-analysis-ik/re ...
- Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装
由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsea ...
- Elasticsearch之分词器的作用
前提 什么是倒排索引? Analyzer(分词器)的作用是把一段文本中的词按一定规则进行切分.对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言,要用不同的 ...
- Elasticsearch之分词器的工作流程
前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch的分词器的一般工作流程: 1.切分关键词 2.去除停用词 3.对于英文单词,把所有字母转为小写(搜索时不区分 ...
- elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词
elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...
- elasticsearch 中文分词(elasticsearch-analysis-ik)安装
elasticsearch 中文分词(elasticsearch-analysis-ik)安装 下载最新的发布版本 https://github.com/medcl/elasticsearch-ana ...
- elasticsearch kibana + 分词器安装详细步骤
elasticsearch kibana + 分词器安装详细步骤 一.准备环境 系统:Centos7 JDK安装包:jdk-8u191-linux-x64.tar.gz ES安装包:elasticse ...
- Elasticsearch修改分词器以及自定义分词器
Elasticsearch修改分词器以及自定义分词器 参考博客:https://blog.csdn.net/shuimofengyang/article/details/88973597
随机推荐
- Pointers and Constants
Pointers and Constants char * const q = "abc"; // q is const *q = 'c'; // OK q++; //ERROR ...
- ChatGPT杀疯了,这人工智能也太离谱了吧
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/2ac8440d.html 你好,我是测试蔡坨坨. 这几天被ChatGPT刷屏,各大网站平台都能看到关于它的文章和视频,上线短 ...
- 如何查看计算机的CPU信息
CPU-Z是一款家喻户晓的CPU检测软件,是检测CPU使用程度极高的一款软件.它支持的CPU种类相当全面,软件的启动速度及检测速度都很快.另外,它还能检测主板和内存的相关信息,其中就有我们常用的内存双 ...
- 学 Rust 要几天?「GitHub 热点速览 v.22.51」
本周的 GitHub Trending 非常给力,一是解决了 Rust 的学习问题,提供了一个全面的教学课程:二是提供了多个高性能工具,比如,为 PWA 而生的 atrilabs-engine,部署方 ...
- [编程基础] Python对象的浅拷贝与深拷贝笔记
Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...
- 基于ERNIELayout&pdfplumber-UIE的多方案学术论文信息抽取
本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5196032?contributionType=1 基于ERNIELayout& ...
- PostgreSQL(02): PostgreSQL常用命令
目录 PostgreSQL(01): Ubuntu20.04/22.04 PostgreSQL 安装配置记录 PostgreSQL(02): PostgreSQL常用命令 PostgreSQL 常用命 ...
- cornerstone4.1破解版 for mac
百度网盘: https://pan.baidu.com/s/1l_0rHMF11mZsUP3qJrp7Uw 密码: 8ei9
- 线性构造treap
数据结构 线性构造treap treap的线性构造可以使复杂度锐减到\(O(n)\),很优秀 treap的本质就是小根堆+二叉搜索树,即保证val满足搜索树的同时,维护rad的小根堆. 现在我们先把数 ...
- angular建立服务打印日志创建全局变量方法有两种,手工创建,依赖注入