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 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- 爬虫系列 | 6、详解爬虫中BeautifulSoup4的用法
bs4,全称BeautifulSoup 4 , 它是Python独有的一种解析方式.也就是说只有Python语言才可以通过这种方式去解析数据. BeautifulSoup 3 只支持Python2,所 ...
- CSRF - Pikachu
概述: Cross-site request forgery 简称为"CSRF"(跨站请求伪造),在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标 ...
- 让 Mongoose 不再重复链接数据库(如何正确连接以解决升级后的报错)
升级了 Mongoose 后,发现项目打不开了.报错: MongooseError: You can not `mongoose.connect()` multiple times while con ...
- 1.5V升3V芯片和电路图,DC-DC升压IC
1.5V升3V的升压芯片,3V给LED供电,或者单片机模块供电等. PW5200A工作频率为1.4MHZ.轻载时自动PWM/PFM模式切换,提高效率. PW5200A能够提供2.5V和5V之间的可调输 ...
- Python数据模型与Python对象模型
数据模型==对象模型 Python官方文档说法是"Python数据模型",大多数Python书籍作者说法是"Python对象模型",它们是一个意思,表示&quo ...
- 记录list.remove()和list.pop()
list.remove(obj):这个是移除列表中某个值的第一个匹配项 list.pop(index):这个是移除列表中下标为index的元素 当元素全是数字或者有数字时注意区分.
- Jmeter-插件扩展及性能监控插件的安装
需要对http服务进行大数据量的传值测试:看看产品中的http服务,能支持传多少字符:目标值是希望能到10w+: 上次测试中,服务器总是内存满导致服务不响应,因此想增加对服务端的性能监控:查阅了smi ...
- 同步与异步 Python 有何不同?
你是否听到人们说过,异步 Python 代码比"普通(或同步)Python 代码更快?果真是那样吗? 1 "同步"和"异步"是什么意思? Web 应用 ...
- Ubuntu 能ping通DNS 地址 无法解析域名
ping通qq百度都行,唯独谷歌不行, 主机能够ping通google的dns服务器地址 8.8.8.8,却无法解析域名 $ ping www.google.co.uk ping: unknown ...
- Netty之Unpooled_Bytebuf
前言 计算机存储基本单位是字节(byte),传输基本单位是bit(位),JAVA NIO提供了ByteBuffer等七种容器来提升传输时的效率,但是在使用时比较复杂,经常要进行读写切换,主要缺点如下: ...