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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《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并实现搜索。  
相关文章
|
算法 Java 索引
Byte Hex CRC计算笔记
Byte Hex CRC计算笔记
222 0
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
|
Shell Python
如何将PyCharm中的终端运行前面的PS如何修改成当前环境
这篇文章介绍了如何在PyCharm的终端中修改命令提示符(PS)以反映当前激活的环境,通过更改PyCharm设置中的Shell Path实现。
|
机器学习/深度学习 数据采集 算法
Python实现Catboost分类模型(CatBoostClassifier算法)项目实战
Python实现Catboost分类模型(CatBoostClassifier算法)项目实战
|
消息中间件 分布式计算 大数据
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
大数据-128 - Flink 并行度设置 细节详解 全局、作业、算子、Slot
860 0
|
分布式计算 Hadoop 大数据
最新版本——Hadoop3.3.6单机版完全部署指南
最新版本——Hadoop3.3.6单机版完全部署指南
1997 57
|
JSON 安全 搜索推荐
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
1472 1
|
存储 缓存 算法
详解JVM内存优化技术:压缩指针
详解JVM内存优化技术:压缩指针
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
9471 0
|
消息中间件 存储 运维
Kafka重要配置参数全面解读(重要)
Kafka重要配置参数全面解读(重要)
965 0

热门文章

最新文章