文档章节

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

强子大叔的码田
 强子大叔的码田
发布于 2014/05/15 20:08
字数 791
阅读 497
收藏 0

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",
这样就可以匹配到文档。

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

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


 

© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 910
博文 1439
码字总数 1221048
作品 9
南京
架构师
私信 提问
ES权威指南(中文版)学习_1

1、在ES中存储数据的行为叫做 索引(indexing),不过在索引之前我们应该明确的是数据应该存储在哪里。 2、在ES中,文档归属于一种类型(type),而这些类型存在于索引(index)中,类比传统...

MrYx3en
2015/09/21
150
0
es不简易指南

1.nested Object mapping及查询 进阶:Elasticsearch之Nested(嵌套)系列、es权威指南-嵌套-查询、es权威指南-嵌套-对象(官方文档中文详细解释) 2.父子文档 进阶:Elasticsearch索引的父子关...

刘阳0292
2017/08/30
0
0
ElasticSearch 攻略(一)

ElasticSearch(下简称 es)一句话简介:Java、NoSQL、based on Lucene、Key-Value & Documented Store、JSON API、borned for FAST INDEX & Search、分布式/副本集/负载均衡/容灾等。 Why ...

sp42
2016/05/14
0
0
Mac下安装Elasticsearch极简指南

Elasticsearch(以下简称ES)是一个面向文档的实时分布式搜索和分析引擎。本文是在Mac系统下使用Homebrew安装ES+Kibana+Marvel的一份极简指南。 前置条件 想要安装ES的前提是已经在本机安装了J...

郗南枫
2017/11/08
0
0
[Elasticsearch] 索引管理 (一)

索引管理 本文翻译自Elasticsearch官方指南的索引管理(Index Management)一章 我们已经了解了ES是如何在不需要任何复杂的计划和安装就能让我们很容易地开始开发一个新的应用的。但是,用不了...

键走偏锋
2017/08/02
15
0

没有更多内容

加载失败,请刷新页面

加载更多

STM32进阶之串口环形缓冲区实现

队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列...

杰杰1号
26分钟前
10
0
设计模式-建造者模式

建造者模式 定义 将一个复杂对象的构建和它的表示分离,使得同样的构建过程创建出不同的表示。这句话理解起来优点抽象,我们打个简单的比方吧,中国人都喜欢做菜,做菜的时候后会放很多配料...

木本本
29分钟前
9
0
017、xml版本代码生成器配置

1、在pom.xml文件中增加mybatis-generator-maven-plugin插件 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>......

北岩
41分钟前
7
0
用jQuery-Easy-UI编写注册页面

本文转载于:专业的前端网站➮用jQuery-Easy-UI编写注册页面 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content=......

前端老手
49分钟前
6
0
Git ssh配置

生成密钥对 ssh-keygen -t rsa -C "email@email.com"邮箱替换自己邮箱在地址C:\Users\账户\.ssh下,id_rsa、id_rsa.pub两个文件复制文件id_rsa.pub内容到github\gitlab的Settings-> SSH ......

JUKE
57分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部