云雷
2018-02-01
3519浏览量
当我们在搜索引擎搜索一个词的时候,背后是上千台机器在为我们工作。那么搜索引擎是如何从数万亿的网页中瞬间查找到我们想要的词的呢?这里要介绍一个概念叫倒排索引
。
倒排索引指的是,把文档拆分成一个个单词,每个单词指向包含该单词的文档ID。在查询时,根据关键字,找到包含该关键字的文档ID列表。再根据ID读取具体的数据。
以英文为例,下面是要被索引的文本:
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
我们就能得到下面的反向文件索引:
"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}
查询what
这个词时,我们找到了0,1这两个ID,然后知道了T0和T1这两个文档包含what
这个词。
由上文的介绍可知,创建倒排索引的关键在于分词。对于英文和中文,分词方式又有区别。
英文语句,每个单词之间有标点符号分割,因此我们把标点符号设置为分词字符,标点符号之间的字符串即为一个单词。
例如语句
it is what it is.what is it?it is a banana!
it
,is
,what
,it
,is
,what
,is
,it
,it
,is
,a
,banana
it
,is
,what
,it
,is
,what
,is
,it
,it
,is
,a
,banana!
我们得到banana!
这样一个特殊的词,在查询时如果查询banana是无结果的,比如查询banana!
才行配置分词字符,请在查询分析属性中配置:
中文语句不同于英文语句,英文的每个单词之间有标点符号分割,中文的单词和单词之间是连接在一起的。中文单个字没有意义,只有和相邻的字组成词汇时,才有意义。例如语句:
中国是一个伟大的国家,中国共产党是一个伟大的政党
每个字表达的含义没有意义,只有组合成词汇,才能理解其中的含义。中文博大精深,不同的字有不同的组合方式,在不同的语境下,词的长度也不一样。人类能够快速的分析出这句话所包含的词:
中国
是
一个
伟大
的
国家
中国共产党
是
一个
伟大
的
政党
两句话中的中国,在前一句中是单独一个词,在后一句中要和之后的共产党组成一个词。
针对包含中文的日志,例如日志:
debug message:登录成功
其中冒号是中文冒号,配置的分词字符是空格。如果只采用分词字符的方式分词,那么得到的词有:
debug
message:登录成功
无法单独搜索登录
或成功
,只有完整输入message:登录成功
才能搜索到日志。
为了解决中文的分词问题,我们引入了智能化的分词算法。
如果日志中包含中文,那么需要打开开关,引入智能化分词,才能够搜索中文单词。
打开后中文开关后,我们分别可以查询debug
,message
,登录
,成功
。
阿里云日志服务存储资源包全新上线,限时优惠59元起,详情请戳:https://promotion.aliyun.com/ntms/act/season-cloudproduct.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云存储基于飞天盘古2.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。