带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(1)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(1)


3.4.2.Elasticsearch基础应用


3.4.2.1.inverted index,doc_values,store及source


创作人:欧阳楚才

 

倒排索引

 

Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

 

假设我们有两个文档,每个文档的正文字段包含如下内容:

 

1、The quick brown fox jumped over the lazy dog

2、Quick brown foxes leap over lazy dogs in summer

 

为了创建倒排索引,我们首先将每个文档的正文字段,拆分成单独的词(我们称它为词条或

Tokens),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。

结果如下所示:


image.pngimage.pngimage.png

现在,如果我们想搜索 Quick brown,我们只需要查找包含每个词条的文档:


image.png


两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用,仅计算匹配词条数量的简单相似性算法,那么我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。

 

但是,我们目前的倒排索引有一些问题:


使用前面的索引搜索 + Quick + fox 不会得到任何匹配文档。(记住,+ 前缀表明这个词必须存在)只有同时出现 Quick 和 fox 的文档才满足这个查询条件,但是第一个文档包含 quick

fox,第二个文档包含 Quick foxes。

 

我们的用户可以合理的期望两个文档与查询匹配,我们可以做的更好。

 

如果我们将词条规范为标准模式,那么我们可以找到与用户搜索的词条不完全一致,但具有足够相关性的文档,例如:

 

l Quick 可以小写化为 quick

l foxes 可以词干提取 -- 变为词根的格式 -- 为 fox。类似的,dogs 可以为提取为 dog

l jumped 和 leap 是同义词,可以索引为相同的单词 jump

 

现在索引看上去像这样:

 

 

l Quick 和 quick 以独立的词条出现,然而用户可能认为它们是相同的词。

l fox 和 foxes 非常相似,就像 dog 和 dogs,他们有相同的词根。

l jumped 和 leap,尽管没有相同的词根,但他们是同义词。


image.png

这还远远不够。我们搜索 +Quick +fox 仍然会失败,因为在我们的索引中,已经没有 Quick 了。但是,如果我们对搜索的字符串,使用与正文字段相同的标准化规则,会变成查询 +quick+fox,这样两个文档都会匹配。

 


PUT logs
{
  "mappings": {
    "_source": {
      "includes": [
        "*.count",
        "meta.*"
      ],
      "excludes": [
        "meta.description",
        "meta.other.*"
      ]
    }
  }
}
PUT logs/_doc/1
{
  "requests": {
    "count": 10,
    "foo": "bar" 
  },
  "meta": {
    "name": "Some metric",
    "description": "Some metric description", 
    "other": {
      "foo": "one", 
      "baz": "two" 
    }
  }
}
GET logs/_search
{
  "query": {
    "match": {
      "meta.other.foo": "one" 
    }
  }
}


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.1.inverted index,doc_values,store及source(2) https://developer.aliyun.com/article/1231137

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
存储 JSON 数据格式
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(4)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(4)
109 0
|
存储 缓存 算法
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(2)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(2)
121 0
|
存储 API 索引
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(5)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(5)
118 0
|
索引
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(3)
带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(3)
|
API 网络架构 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(1)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(1)
|
存储 API 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(6)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(6)
|
JSON API 数据格式
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(2)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(2)
|
索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(4)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(4)
|
API 索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(3)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(3)
|
索引
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)
带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)