Elasticsearch高级搜索技术-全文搜索

news2024/10/22 2:58:37

目录

倒排索引 (Inverted Index)

示例

分词器 (Analyzer)

评分机制 (Scoring)

查询执行

match 查询

match_phrase 查询


全文搜索是Elasticsearch的核心功能之一,它通过复杂的算法和数据结构来提供高效的搜索能力。为了深入理解其工作原理,我们需要探讨几个关键概念:倒排索引、分词器、评分机制以及查询的执行过程。

倒排索引 (Inverted Index)

倒排索引是全文搜索引擎的基础。与传统的正向索引(记录每个文档中包含哪些词)不同,倒排索引记录的是每个词出现在哪些文档中。这样当用户输入一个搜索请求时,系统可以快速定位到所有含有这些词的文档。

示例

假设有一个小型数据库,包含两篇新闻文章:

  • 文章1: 人工智能正在改变世界。
  • 文章2: 未来的世界将由智能机器主导。

倒排索引可能看起来像这样:

{
  "人工智能": [1],
  "正在": [1],
  "改变": [1],
  "世界": [1, 2],
  "未来": [2],
  "将": [2],
  "由": [2],
  "智能": [2],
  "机器": [2],
  "主导": [2]
}

分词器 (Analyzer)

在创建倒排索引之前,Elasticsearch会使用分词器对文本进行处理。分词器负责将文本分解成单个词语,并且可能会应用如小写转换、停用词移除等操作。不同的语言和地区通常需要不同的分词策略。

例如,在中文环境中,可能使用ik分词器或smartcn分词器来正确地分割中文句子。

评分机制 (Scoring)

Elasticsearch使用TF-IDF(Term Frequency - Inverse Document Frequency)和其他因素来计算每个文档的相关性得分。TF-IDF反映了某个词在特定文档中的重要程度及其在整个文集中的普遍性。此外,还可以考虑诸如短语匹配度、字段权重等因素。

查询执行

当你发起一个查询时,Elasticsearch会解析这个查询并生成一个内部表示形式,然后根据这个表示形式去查找倒排索引,最后返回结果。

match 查询

match查询会对输入的文本进行同样的分析过程,就像在索引过程中一样。这确保了查询条件能够准确对应到已有的词汇表上。

GET /news/_search
{
  "query": {
    "match": {
      "content": "人工智能"
    }
  }
}
match_phrase 查询

match_phrase查询用于精确匹配短语,同时允许通过slop参数控制短语内词之间的距离。

GET /news/_search
{
  "query": {
    "match_phrase": {
      "content": {
        "query": "人工智能",
        "slop": 2  // 允许最多两个其他单词插在这两个词之间
      }
    }
  }
}

这里的slop值为2意味着“人工智能”这两个词可以在文中相隔不超过两个其他词的情况下仍被视为匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日一题】【算法双周赛】【第 20 场 小白入门赛评价/分享】赛后另类AI写题分析分享

第 20 场 小白入门赛 1. 四个亲戚【算法赛】2. 黛玉泡茶【算法赛】AI分析具体实现代码解析复杂度分析示例运行 结果二 3. 宝玉请安【算法赛】AI分析问题分析路径计算代码实现代码解析示例运行复杂度分析 结果: 交上去 4. 贾母祝寿【算法赛】AI分析问题分析实现步骤代…

【日志】关于多益网申

2024.10.19 早先听闻多益的测试题非常抽象,凡是测过的人都说太抽象了,我还以为他考我各种算法或者编程语言呢。我今天也去做了一下,测试题里面大多都考些计算题,找规律题,判断推理题,还有一些图形转换&…

计算机毕业设计 基于java旅游攻略平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【命令操作】Linux中多种关机和重启的命令介绍 _ 统信 _ 麒麟 _ 方德

往期好文:【系统配置】信创系统配置文件保护与防篡改 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于在Linux系统中多种关机和重启命令介绍的文章。Linux作为一个广泛应用的开源操作系统,提供了多种关机和重启的方式…

jupyter notebook 笔记

nbclassic 经典版 新版的 jupyter notebook 太丑了。 最难受的是字体太小了。 我还是喜欢老版本的 jupyter notebook. 安装经典版: pip install nbclassic 启动经典版: jupyter server 或是 jupyter nbclassic 参考来源: https://github.com/jupyter/nbclassic jupyter note…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

C++ —— 关于多态

目录 1. 多态的概念 2.多态的定义及实现 3. 虚函数 3.1 虚函数的重写/覆盖 3.2 关于多态的面试难题 3.3 虚函数重写的⼀些问题 3.4 override 和 final关键字 3.5 重载/重写/隐藏的对比 3.6 纯虚函数和抽象类 4.多态的原理 4.1虚函数表指针 4.2 多态是如何实现的 4…

go压缩的使用

基础:使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…

如何使用DockerSpy检测你的Docker镜像是否安全

关于DockerSpy DockerSpy是一款针对Docker镜像的敏感信息检测与安全审计工具,该工具可以帮助广大研究人员在Docker Hub上检测和搜索自己镜像的安全问题,并识别潜在的泄漏内容,例如身份验证密钥等敏感信息。 功能介绍 1、安全审计&#xff1a…

linux一二三章那些是重点呢

第一章 静态库动态库的区别 什么是库 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接 拿来用的变量、函数或类。 如何制作 静态动态库 静态库: GCC 进行链接时,会把静态库中代码打…

2013 lost connection to MySQL server during query

1.问题 使用navicat连接doris,会有这个错误。 2.解决 换低版本的navicat比如navicat11。

linux运行openfoam并行会报错:attempt to run parallel on 1 processor

linux运行openfoam并行会报错:attempt to run parallel on 1 processor 步骤: 1.先在终端输入which mpirun,查看当前并行路径; 2.输入gedit ~/.bashrc,文本方式打开bashrc文件; 3.修改为export PATH/usr/bin:$PATH&am…

支持阅后即焚的笔记Enclosed

什么是 Enclosed ? Enclosed 是一个简约的网络应用程序,旨在发送私人和安全的笔记。所有笔记均经过端到端加密,确保服务器和存储对内容一无所知。用户可以设置密码、定义有效期 (TTL),并选择在阅读后让笔记自毁。 软件特点&#x…

第一年改考408的学校有炸过的吗?怎么应对突然改考408?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 专业课改考 408 后,分数线不一定会暴涨,其变化受到多种因素影响: 可能导致分数线不暴涨甚至下降的因素: 考试难度增加:408 统考涵盖数据结构、计算机组成原理…

P2-1与P2-2.【C语言基本数据类型、运算符和表达式】第一节与第二节

讲解视频: P2-1.【基本数据类型、运算符和表达式】第一节 P2-2.【基本数据类型、运算符和表达式】第二节 必备知识与理论 1.数据类型概述 所谓数据类型,是按被定义变量的性质,表示形式,占据存储空间的多少&#xff0…

【分布式事务-04】分布式事务seata的XA模式

redis系列整体栏目 内容链接地址【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】分布式事务seata的安装下载与环境搭建https://zhenghuisheng.blog.csdn.net/article/details/142893117【三】分布式事务seata的AT模式htt…

k8s ETCD数据备份与恢复

在 Kubernetes 集群中,etcd 是一个分布式键值存储,它保存着整个集群的状态,包括节点、Pod、ConfigMap、Secrets 等关键信息。因此,定期对 etcd 进行备份是非常重要的,特别是在集群发生故障或需要恢复数据的情况下。本文…

Axure科技感元件:打造可视化大屏设计的得力助手

Axure,作为一款专业的原型设计工具,凭借其强大的设计功能、丰富的组件库和灵活的交互能力,成为了许多设计师打造科技感设计的首选工具。其中,Axure科技感元件更是以其独特的魅力和实用性,在数据可视化大屏、登录界面、…

HarmonyOS开发(State模型)

一、State模型概述 FA(Feature Ability)模型:从API 7开始支持的模型,已经不再主推。 Stage模型:从API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、Wi…

Leetcode—1114. 按序打印【简单】(多线程)

2024每日刷题&#xff08;179&#xff09; Leetcode—1114. 按序打印 C实现代码 class Foo { public:Foo() {firstMutex.lock();secondMutex.lock();}void first(function<void()> printFirst) {// printFirst() outputs "first". Do not change or remove t…