带你读《Elastic Stack 实战手册》之16:——3.4.2.1.inverted index,doc_values,store及source(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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
5月前
|
存储 人工智能 JSON
AI 成为主流负载后,数据基础设施将如何演进?|Apache Doris 2026 Roadmap
Scale Intelligence, Accelerate Insight,不仅是年度主题,也定义了 Doris 在 AI 时代的演进方向。
537 0
|
存储 机器学习/深度学习 人工智能
Elasticsearch:使用阿里云 AI 服务进行向量化和重新排名
本文介绍了如何将阿里云 AI 功能与 Elasticsearch 集成,以提高语义搜索的相关性。
1003 0
|
数据可视化 安全 数据挖掘
基于 Kibana Dashboard 创建仪表板,可视化匹配航班信息
在今天的练习中,我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助
5386 1
基于 Kibana Dashboard 创建仪表板,可视化匹配航班信息
|
Prometheus Kubernetes 负载均衡
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(1)
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(1)
690 0
|
敏捷开发 安全 小程序
3大能力升级,云效+钉钉,让研发协作更「敏捷」
你的团队是否面临如下问题:没有敏捷经验,不知道如何落地敏捷或者敏捷实施不规范?研发交付过程信息更新不及时,无法及时跟进交付结果?员工入职离职,多套账号权限管理难?缺乏交付度量数据,不知道如何提升交付效能?本次产品产品升级,将是云效在敏捷研发上的最新产品进展和最佳实践。
3120 4
3大能力升级,云效+钉钉,让研发协作更「敏捷」
第二届阿里巴巴全球数学竞赛试题(预选赛第一轮)
第二届阿里巴巴全球数学竞赛,完整试题来啦!
34124 0
第二届阿里巴巴全球数学竞赛试题(预选赛第一轮)
|
开发者
阿里云开发者社区知识产权保护暨版权授权与侵权投诉指引
阿里云开发者社区知识产权保护暨版权授权与侵权投诉指引
1133583 7
|
存储 Kubernetes 固态存储
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(5)
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(5)
442 0
|
存储 Kubernetes 固态存储
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(7)
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(7)
408 0
|
Kubernetes 数据安全/隐私保护 索引
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(9)
带你读《Elastic Stack 实战手册》之15:——3.4.1.8. ECK 安装(9)
320 0

热门文章

最新文章