ElasticSearch 搜索引擎概念简介
公号:码农充电站pro
主页:https://codeshellme.github.io
1,倒排索引
倒排索引是一种数据结构,经常用在搜索引擎的实现中,用于快速找到某个单词所在的文档。
倒排索引会记录一个单词词典(Term Dictionary)和一个倒排列表:
- 单词词典:包含了所有文档包含的所有 Term。
- 倒排列表:由一系列的倒排索引项组成,每个倒排索引项包含 4 项内容,分别是:
- 文档 ID
- 词频 TF:Term 在文档中出现的次数,用于相关性评分。
- 位置 Position:Term 在文档中出现的位置,用于语句搜索。
- 偏移 Offset:记录单词的开始结束位置,用于实现高亮显示。
假设我们有 3 篇文档:
| 文档 ID | 文档内容 |
|---|---|
| 1 | hello world |
| 2 | hello Java |
| 3 | hello elasticsearch |
上面表格记录的是一种正向关系,叫做正排索引。
倒排索引记录的是一种反向关系,如下:
| Term | 文档 ID | 词频 TF | Position | Offset |
|---|---|---|---|---|
| hello | 1 | 1 | 0 | <0, 5> |
| hello | 2 | 1 | 0 | <0, 5> |
| hello | 3 | 1 | 0 | <0, 5> |
| world | 1 | 1 | 1 | <6, 5> |
| Java | 2 | 1 | 1 | <6, 4> |
| elasticsearch | 3 | 1 | 1 | <6, 19> |
ES 默认会对所有文档的所有字段建立倒排索引;也可以通过设置不对某些字段建立倒排索引,优点是节省空间,缺点是这些字段的内容无法被搜索。
2,搜索相关性
搜索相关性用于描述文档与搜索字符串的匹配程度(ES 会计算出一个评分),目的是为文档进行排序,从而将最符合用户需求的文档排在前面。
搜索相关性算法有 TF-IDF 算法和 BM25 算法。
文章 《朴素贝叶斯分类-实战篇》中介绍到了 TF-IDF 算法,可作为参考。
BM25 与 TF-IDF 的比较:

当 TF 无限增加的时候,BM25 算分会趋向于一个数值,而不是(像 TF-IDF 一样)无限增长。
在 ES 5 之前,默认使用的是 TF-IDF 算法;在 ES 5 之后,默认使用的是 BM 25 算法。
3,一个搜索过程
下图展示了一个搜索过程:

当用户向搜索引擎发送一个搜索请求的时候,搜索引擎经过了以下步骤:
- 分词器对搜索字符串进行分词处理。
- 在倒排索引表中查到匹配的文档。
- 对每个匹配的文档进行相关性评分。
- 根据相关性评分对文档进行排序。
- 将排好序的文档返回给用户。
ElasticSearch 搜索引擎概念简介的更多相关文章
- 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念
第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...
- 【ElasticSearch】概念
小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 对小史面试情况感兴趣的同学可以观看面试现场系列. 随着央视诗词大会的热播,小史开始对诗词感兴趣 ...
- elasticsearch搜索引擎环境的搭建
elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- ElasticSearch搜索引擎安装配置中文分词器IK插件
近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...
- Linux系统中ElasticSearch搜索引擎安装配置Head插件
近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...
- 四十四 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
1.elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内 ...
- Elasticsearch入门教程(二):Elasticsearch核心概念
原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- 超过varchar定义长度
mysql> select version();+------------+| version() |+------------+| 5.1.73-log |+------------+1 ro ...
- ORA-00245 control file backup operation failed 分析和解决
一.问题说明 操作系统: RedHat 5.8 数据库: 11.2.0.3 2节点RAC. 使用RMAN 备份的时候,报如下错误: ORA-00245: control file backup fai ...
- kubernets之计算资源
一 为pod分配cpu,内存以及其他的资源 1.1 创建一个pod,同时为这个pod分配内存以及cpu的资源请求量 apiVersion: v1 kind: Pod metadata: name: ...
- 关于安装版JDK1.8 1.7更改多个JDK环境变量 不生效
配置maven(apache-maven-3.3.9)时提示异常:'mvn' 不是内部或外部命令,上网查找得知 它不支持jdk1.8,所以重新安装jdk1.7,后来就出现下面的问题 现象: 当使用安装 ...
- 三节锂电池充电管理芯片,IC电路图如何设计
关于三节锂电池供电的产品,在三节锂电池上,需要三个电路系统: 1,三节锂电池保护电路, 2,三节锂电池充电电路, 3,三节锂电池输出电路. 1.三节锂电池保护电路,芯片电路图 控制三节锂电池池的充电电 ...
- HTML部分
1.说一下<label>标签的用法 label标签主要是方便鼠标点击使用,扩大可点击的范围,增强用户操作体验 2.说一下事件代理? 事件委托是指将事件绑定到目标元素的父元素上,利用冒泡机制 ...
- Caffeine 缓存库
介绍 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库. 缓存和ConcurrentMap有点相似,但还是有所区别.最根本的区别是ConcurrentMap将会持有所有加 ...
- gradles理解和文件配置
gradle gradle tasks :查看所有的taske命令 bootJar:打包,讲项目的所有依赖和主工程代码打包,一个可直接执行的一个包,不需要tomcat运行 gradle使用bootja ...
- (006)每日SQL学习:关于to_char函数
to_char函数的官方文档说明: 详细to_char请移步:https://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html 需求:n ...
- Privacy-Enhanced Mail (PEM) Privacy Enhancement for Internet Electronic Mail
小结 1. 加密基本流程 本地格式标准格式认证(填充与完整性检查)与加密可打印编码 Privacy-Enhanced Mail (PEM) RFC 2313 - PKCS #1: RSA Encryp ...