Elasticsearch之文本搜索(十三)

这篇具有很好参考价值的文章主要介绍了Elasticsearch之文本搜索(十三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        ES作为一款搜索引擎框架,文本搜索是其核心功能。ES在文本索引的建立和搜索过程中依赖两大组件,即Lucene和分析器。其中,Lucene负责进行倒排索引的物理构建,分析器负责在建立倒排索引前和搜索前对文本进行分词和语法处理。

文本的索引建立过程

        为了完成对文本的快速搜索,ES使用了一种称为“倒排索引”的数据结构。倒排索引中的所有词语存储在词典中,每个词语又指向包含它的文档信息列表。

假设需要对下面两个旅馆的信息进行倒排索引的创建:

  • 文档ID为001,旅馆名称为“北京嘉怡假日旅馆”;
  • 文档ID为002,旅馆名称为“北京欣欣旅馆”。

首先,ES将文档交给分析器进行处理,处理的过程包括字符过滤、分词和分词过滤,最终的处理结果是文档内容被表示为一系列关键词信息的集合。这里的关键词信息指的是关键词本身以及它在文档中出现的位置信息和词性信息,下图所示为文档001的分析结果示意图。

Elasticsearch之文本搜索(十三)

 其次,ES根据分析结果建立文档-词语矩阵,用以表示词语和文档的包含关系,本例中的文档-词语矩阵如下表所示:

北京 嘉怡 假日 欣欣 旅馆
001 1 1 1 0 1
002 1 0 0 1 1

通过上面的文档-词语矩阵可知,ES从文档001中提取出4个词语,从文档002中提取出3个词语。

        文档-词语矩阵建立完成之后,接着需要建立基于词语的倒排索引。ES会遍历文档词语矩阵中的每一个词语,然后将包含该词语的文档信息与该词语建立一种映射关系。映射关系中的词语集合叫作Term Dictionary,即“词典” .

        映射中的文档集合信息不仅包含文档ID,还包含词语在文档中的位置和词频信息,包含这些文档信息的结构叫作Posting List。

        对于一个规模很大的文档集合来说,可能包含几十万甚至上百万的词语集合,能否快速定位某个词语,直接影响搜索时的响应速度。

        因此需要一种高效的数据结构对映射关系中的词语集合进行索引,这种结构叫作Term Index。上述3种结构结合在一起就构成了ES的倒排索引结构,倒排索引与三者之间的逻辑关系如下图所示:

Elasticsearch之文本搜索(十三)

 本例中的倒排索引结构如下图所示:

Elasticsearch之文本搜索(十三)

 文本的搜索过程

在ES中,一般使用match查询对文本字段进行搜索。match查询过程一般分为如下几步:

  1. ES将查询的字符串传入对应的分析器中,分析器的主要作用是对查询文本进行分词,并把分词后的每个词语变换为对应的底层lucene term查询。
  2. ES用term查询在倒排索引中查找每个term,然后获取一组包含该term的文档集合。
  3. ES根据文本相关度对每个文档进行打分计算,打分完毕后,ES把文档按照相关性进行倒序排序。
  4. ES根据得分高低返回匹配的文档。

比如以下对旅馆索引中搜索“金都嘉怡”的查询如下:

Elasticsearch之文本搜索(十三)

 ES分析器先将查询词切分为“金都”和“嘉怡”,然后分别到倒排索引里查找两个词对应的文档列表并获得了文档001和002,然后根据相关性算法计算文档得分并进行排序,最后将文档集合返回给客户端。文章来源地址https://www.toymoban.com/news/detail-465930.html

到了这里,关于Elasticsearch之文本搜索(十三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 ElasticSearch 作为知识库,存储向量及相似性搜索_elasticsearch cosinesimilarity(1)

    下面基于上篇文章使用到的 Chinese-medical-dialogue-data 中文医疗对话数据作为知识内容进行实验。 本篇实验使用 ES 版本为: 7.14.0 二、Chinese-medical-dialogue-data 数据集 GitHub 地址如下: https://github.com/Toyhom/Chinese-medical-dialogue-data 数据分了 6 个科目类型: 数据格式如下所示: 其中

    2024年04月11日
    浏览(46)
  • Elasticsearch:使用 Elasticsearch 矢量搜索和 FastAPI 构建文本搜索应用程序

    在我的文章 “Elastic:开发者上手指南” 的 “ NLP - 自然语言处理及矢量搜索 ”,我对 Elastic Stack 所提供的矢量搜索有大量的描述。其中很多的方法需要使用到 huggingface.co 及 Elastic 的机器学习。这个对于许多的开发者来说,意味着付费使用。在那些方案里,带有机器学习的

    2024年02月11日
    浏览(60)
  • Elasticsearch:使用 Elasticsearch 向量搜索和 FastAPI 构建文本搜索应用程序

    在我的文章 “Elastic:开发者上手指南” 的 “ NLP - 自然语言处理及矢量搜索 ”,我对 Elastic Stack 所提供的矢量搜索有大量的描述。其中很多的方法需要使用到 huggingface.co 及 Elastic 的机器学习。这个对于许多的开发者来说,意味着付费使用。在那些方案里,带有机器学习的

    2024年02月09日
    浏览(54)
  • Elasticsearch:使用 ELSER 文本扩展进行语义搜索

    在今天的文章里,我来详细地介绍如何使用 ELSER  进行文本扩展驱动的语义搜索。 如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的链接来进行安装: 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kiba

    2024年02月07日
    浏览(50)
  • Elasticsearch:使用 huggingface 模型的 NLP 文本搜索

    本博文使用由 Elastic 博客 title 组成的简单数据集在 Elasticsearch 中实现 NLP 文本搜索。你将为博客文档建立索引,并使用摄取管道生成文本嵌入。 通过使用 NLP 模型,你将使用自然语言在博客文档上查询文档。 如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的链接

    2024年02月07日
    浏览(39)
  • Elasticsearch:如何部署 NLP:文本嵌入和向量搜索

    作为我们自然语言处理 (NLP) 博客系列的一部分,我们将介绍一个使用文本嵌入模型生成文本内容的向量表示并演示对生成的向量进行向量相似性搜索的示例。我们将在 Elasticsearch 上部署一个公开可用的模型,并在摄取管道中使用它来从文本文档生成嵌入。然后,我们将展示如

    2024年02月05日
    浏览(52)
  • ES es Elasticsearch 十三 Java api 实现搜索 分页查询 复杂查询 过滤查询 ids查询 等

    目录 Java api 实现搜索 Pom.xml 建立链接 搜索全部记录 增加规则值查某些字段 搜索分页 全代码 Ids 搜索 搜索Match搜索 multi_match 搜索 多字段搜索 复杂查询 bool查询 filter  bool 复杂查询增加过滤器查询 复杂擦好像加排序 日志 思路 参考 api 写法 写Java代码 请求条件构建层次

    2024年02月04日
    浏览(58)
  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(55)
  • css-文本垂直居中, 左侧border与文字作为导航标题

    1.文本垂直居中         1.1 Flexbox 布局         1.2Grid 布局: 2. 左侧border与文字作为导航标题

    2024年02月01日
    浏览(60)
  • Vim是一款功能强大的文本编辑器

    简介: Vim是一款功能强大的文本编辑器,广泛用于Linux系统。以下是Vim编辑器的基本使用方法: 打开文件: 使用vim命令加上要编辑的文件名,例如:vim filename。 进入编辑模式: 在Vim中,有多种模式,初始状态是命令模式,需要按下i键或a键进入编辑模式。 编辑文本: 在编

    2024年04月23日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包