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 示 ...
随机推荐
- H3C 根据子网掩码计算子网数
- dotnet 获取用户设备安装了哪些 .NET Framework 框架
从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息 在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\N ...
- 举例理解Hibernate的三种状态(转)
转自:https://blog.csdn.net/yiguang_820/article/details/79073152 初学Hibernate,了解到Hibernate有三种状态:transien ...
- Python自定义函数的参数
在Python中自定义的函数可以有三类不同的参数 formal parameters positional arguments Keyword Arguments When a final forma ...
- background新增属性
今天解除了几个曾经没有用到的属性,所以想总结并且复习一下. background-origin属性:有三个属性值,分别是border-box,padding-box,content-box.看到bor ...
- python元祖(tuple)
# 列表:有序,元素可以被修改 # 列表 # list # li = [111,22,33,44] # 元组:元素不可被修改,不能被增加或者删除 # ps: # tuple # tu = (11,22 ...
- 基于 HTML5 + WebGL 的无人机 3D 可视化系统
前言 近年来,无人机的发展越发迅速,既可民用于航拍,又可军用于侦察,涉及行业广泛,也被称为“会飞的照相机”.但作为军事使用,无人机的各项性能要求更加严格.重要.本系统则是通过 Hightopo 的 ...
- Objection基本原理
1,Objection 的简介 就是一个依赖注入框架,github地址:https://github.com/atomicobject/objection 2,Objection 原理 3,Objec ...
- Spring in action读书笔记(一) 自动化装配bean
需要引入的ja包 <dependency> <groupId>org.springframework</groupId> <artifactId>spr ...
- cs服务器搭建(cobaltstrike)
linux服务器中安装 1.因为cs这个工具需要用到Java环境,新装的linux系统没有Java环境,所以这里先装一下java环境 yum install -y java-1.8.0-openjdk ...