ES权威指南[官方文档学习笔记]-56 Inverted index

es:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/inverted-index.html

下一页:http://my.oschina.net/qiangzigege/blog/265553

内容:

es使用称为倒排索引的结构达到快速全文搜索的目的。

一个倒排索引包含一系列不同的单词,这些单词出现在任何一个文档,
对于每个单词,对应着所有它出现的文档。

比如说,我们有2个文档,每个文档有一个conteng字段。
内容如下:
“ The quick brown fox jumped over the lazy dog”
“ Quick brown foxes leap over lazy dogs in summer”

为了创建倒排索引,
我们首先对每个字段进行分词,我们称之为terms或者tokens,创建了一些列有序列表,
然后列举了每个单词所出现的文档,结果如下:

Term      Doc_1  Doc_2
-------------------------
Quick   |       |  X
The     |   X   |
brown   |   X   |  X
dog     |   X   |
dogs    |       |  X
fox     |   X   |
foxes   |       |  X
in      |       |  X
jumped  |   X   |
lazy    |   X   |  X
leap    |       |  X
over    |   X   |  X
quick   |   X   |
summer  |       |  X
the     |   X   |
------------------------
现在,如果我们想搜索"quick brown",我们只需要找到每个单词出现的文档。

Term      Doc_1  Doc_2
-------------------------
brown   |   X   |  X
quick   |   X   |
------------------------
Total   |   2   |  1

两个文档都匹配,但是第一个文档有更高的匹配度,
如果我们采用一个简单的相似算法,我们可以说,第一个文档比第2个文档有更高的匹配度。
也更相关。


但是,仍然有一些问题。

"Quick"和"quick"看起来是不同的单词,但是用户通常认为是一样的。

"fox"和"foxes"更相似,还有"dog"和"dogs",具有共同的词根。

"jumped"和"leap",尽管不具备相同的词根,意思上是一样的。它们是同义词。

对于以上的索引,一个搜索"+Quick + fox"不可能匹配任何文档。

单词"Quick" 和单词 "fox"必须在同一个文档里以满足查询要求,
但是第一个文档包括"quick fox" 而第2个文档包含 "Quick foxes".

我们的用户有理由希望两个文档都匹配,我们可以做的更好。

如果我们把单词归一化到标准格式,我们就可以达到上面的目标。
这种情况下,虽然单词不是完全一致,但是也足够相似保证相关性。比如:


"Quick" 可以小写为 "quick".
"foxes" 可以提取词根成为 "fox". 
类似的 "dogs" 可以成为 "dog".
"jumped" 和 "leap" 是同义词,可以索引为一个单词 "jump".

那么,现在的索引就是:

Term      Doc_1  Doc_2
-------------------------
brown   |   X   |  X
dog     |   X   |  X
fox     |   X   |  X
in      |       |  X
jump    |   X   |  X
lazy    |   X   |  X
over    |   X   |  X
quick   |   X   |  X
summer  |       |  X
the     |   X   |  X
------------------------

我们的搜索 "+Quick +fox" 仍然失败,因为我们不再有Quick在索引里,
尽管如此,如果我们采用同样的归一化规则,
我们可以用在查询字符串上,它就变为 "+quick +fox",
这样就可以匹配到文档。

这一点非常重要,你只能找到那些在你的索引里出现的单词,所以,索引过的文本和查询字符串都需要遵循同一种归一化规则。

分词和归一化叫做分析,下一节讨论。


 

转载于:https://my.oschina.net/qiangzigege/blog/265360

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值