ElasticSearch 倒排索引简析

内容概要
- 倒排索引是什么?为什么需要倒排索引?
- 倒排索引是怎么工作的?
1. 倒排索引是什么?
假设有一个交友网站,信息表如下:

美女1:“我要找在上海做 PHP 的哥哥。”
需要匹配 性别、城市、语言列。
美女2:“我要找北京的爱旅游、爱美食的 JAVA 哥哥。”
更复杂了是吧,实际场景中,会有更复杂的排列组合。
对于这类的搜索,关系型数据库的索引就很难应付了,适合使用全文搜索的倒排索引。
倒排索引是一种数据库的索引形式,存储了 “内容 -> 文档” 映射关系,目的是快速的进行全文搜索。
2. 倒排索引是怎么工作的?
主要包括2个过程:
- 创建倒排索引
- 倒排索引搜索
2.1 创建倒排索引
举个例子,有2个文档:
- Document#1
“Recipe of pasta with sauce pesto”
- Document#2
“Recipe of delicious carbonara pasta”
先对文档进行分词,形成一个个的 token,也就是 单词,然后保存这些 token 与文档的对应关系。
结果如下:

2.2 倒排索引搜索
搜索示例:
- 搜索 “pasta recipe”
先分词,得到2个 token,( “pasta”、“recipe” )。
然后去倒排索引中进行匹配。

这2个词在2个文档中都匹配,所以2个文档都会返回,而且分数相同。
- 搜索 “carbonara pasta”

同样,2个文档都匹配,都会返回。
这次 document#2 的分数要比 document#1 高。
因为 #2 匹配了2个词(“carbonara”、“pasta”),#1 只匹配了一个(“pasta”)。
2.3 转换
有时我们可以在保存和搜索之前对 token 进行一些转换,最普遍的例如:
- 扔掉停止词
停止词是那些使用量非常大,但又没有什么意义的词。
例如英文中的 “of”, “the”, “for” ……
- 元素化
把单词处理为字典中的标准词,例如:
“running” => “run”
“walks” => “walk”
“thought” =>“think”
- 词干分析
通过切断词尾将一个词转换成词根形式的过程。
不能处理不规则动词的情况,但可以处理字典中没有的词。
推荐阅读:

ElasticSearch 倒排索引简析的更多相关文章
- ElasticSearch极简入门总结
一,目录 安装es 项目添加maven依赖 es客户端组件注入到spring容器中 es与mysql表结构对比 索引的删除创建 文档的crud es能快速搜索的核心-倒排索引 基于倒排索引的精确搜索. ...
- 简析.NET Core 以及与 .NET Framework的关系
简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- PHP的错误报错级别设置原理简析
原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...
- Android 启动过程简析
首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...
- Android RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
随机推荐
- artDialog4.0.5
artDialog4.0.5 2011-08-22 11:54:36 haiwei_sun 阅读数 4109 收藏 更多 分类专栏: jquery 下载 Google Code 项目主页 最新版 ...
- Echarts构建图表
Echarts学习-构建图表 相信有很多的前端开发人员在开发Echarts图表的过程中都遇到对图表结构过无从下手,面对一大堆的专业词汇一脸懵逼的样子,在经过了一段时间的踩坑后,终于摸索出了一套完善的学 ...
- 应用八:Vue之在nginx下的部署实践
最近有时间研究了下前端项目如何在nginx服务器下进行部署,折腾了两天总算有所收获,汗~~ 所以就想着写篇文章来总结一下,主要包括以下三个方面: 1.打包好的vue项目如何进行部署. 2.如何反向代理 ...
- es6笔记 day3---数组新增东西
Array.from()的作用就是把类数组转成数组.所谓类数组,就是有长度的数组 ----------------------------------------------------------- ...
- webstorm一键格式化为Eslint标准
- Python6_模块、包、import、from import的解释
先说一下模块和包是什么? 模块(module):简单来说一个模块(module)就是一个py文件.在python中是这么约定. 模块里面有函数.类,就是一组代码的集合. 模块显然要有一个名字,这个 ...
- Python之eval和exec
eval可以执行字符串形式的表达式 In [1]: eval("1 + 2 + 3") Out[1]: 6 In [2]: eval("a + 1", {&qu ...
- apium环境搭建(mac)
appium 环境搭建 安装homebrew(Mac OSX上的软件包管理工具) $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuse ...
- nginx部署vue跨域proxy方式
server { listen 80; charset utf-8; #server_name localhost; server_name you_h5_name; ###VUE项目H5域名 err ...
- head插件安装-elasticsearch
1.安装node环境: 下载地址:https://nodejs.org/download/release/v8.13.0/node-v8.13.0-linux-x64.tar.gz gunzip n ...