前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搜索如何倒排索引?如何模糊匹配?

搜索如何倒排索引?如何模糊匹配?

作者头像
二哥聊运营工具
发布2021-12-17 11:53:52
1.5K0
发布2021-12-17 11:53:52
举报
文章被收录于专栏:程序员泥瓦匠

一、 索引数据结构

搜索引擎使用倒排索引来组织数据,比如源文档

代码语言:javascript
复制
{"id":1,"title":"这是一张很贵的名画","tag":12345}
{"id":2,"title":"这是一幅相当贵的名画","tag":54321}

title 可以分词为

  • "这/是/一张/很/贵/名画/画”
  • "这/是/一幅/相当/贵/名画/画"("的"字作为停止词没有进入到索引)

分词得到的每一个词元,比如"画",称作一个term,那么倒排索引存储的数据将会变成:

title

tag

term

文档id

term

文档id

1,2

12345

1

1,2

54321

2

一张

1

一幅

2

1

相当

2

1,2

名画

1,2

1,2

二、搜索如何进行模糊匹配

搜索引擎使用倒排索引来进行模糊匹配,以上文为例,输入"很贵的画”搜索时:

首先输入词也进行分词"很/贵/画",然后用得到的term去和索引数据进行比对,得到:"很"->{1},“贵”->{1,2},"画"->{1,2},然后"很"∩"贵"∩"画"={1},得到文档1为结果,模糊匹配在索引内部都是通过分词后的term精确匹配来计算的

2.1 关于匹配度

es的match查询通常可以带匹配度(默认是75%),依旧输入"很贵的画",如果匹配度是100%,那么结果就是"很"∩"贵"∩"画"={1},如果匹配度降到75%(搜索词越短,75%的范围越模糊),那么结果(按正常理解)可以是("很"∩"贵)υ("贵"∩"画")υ("很"∩"画")={1,2}

2.2 关于短的搜索词

上面说到短的搜索词75%的匹配度很模糊,因为貌似es有个匹配度自动降级,短词搜索的时候匹配度会自动降到最低,只要有一个term匹配就可以当作结果。

还是上面的例子,输入"很贵的画",分词得到"很/贵/画",按照75%的匹配度,结果应该是("很"∩"贵)υ("贵"∩"画")υ("很"∩"画")={1,2},但是实际的搜索结果是"很"υ"贵"υ"画"={1,2}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员泥瓦匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、搜索如何进行模糊匹配
  • 2.1 关于匹配度
  • 2.2 关于短的搜索词
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档