博客
关于我
ElasticSearch倒排索引简析
阅读量:230 次
发布时间:2019-02-28

本文共 944 字,大约阅读时间需要 3 分钟。

内容概要

  • 倒排索引是什么?为什么需要倒排索引?
  • 倒排索引是怎么工作的?

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”

  • 词干分析

通过切断词尾将一个词转换成词根形式的过程。

不能处理不规则动词的情况,但可以处理字典中没有的词。

转载地址:http://xzhs.baihongyu.com/

你可能感兴趣的文章
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(上)
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
查看>>
nacos服务提供和发现及客户端负载均衡配置
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册与发现的2种实现方法!
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册Dubbo(2.7.x)以及namespace配置
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
查看>>
nacos源码 nacos注册中心1.4.x 源码 如何注册服务 发送请求,nacos clinet客户端心跳 nacos 注册中心客户端如何发送的心跳 (三)
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>