带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(1)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(1)

3.4.2.17.3.全文搜索/精确搜索


创作人:金端

审稿人:欧阳楚才

 

在 ES 的文本搜索中,精确搜索和全文搜索是使用 ES 进行搜索时基本且常见的一个话题。

这里先重申一下 keyword 和 text 类型的概念:

 

l keyword:建立索引不分词,可以用来过滤、排序和聚合。可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求。

l text:存储数据默认进行分词,分词机制之后 ES 允许检索到该文本切分而成的词语,但是text类型的数据不能用来过滤、排序和聚合等操作。用来索引长文本,例如电子邮件主体部分或者一款产品的介绍。

 

在精确搜索和全文搜索的内容中,主要用于存储文本的字段类型就是 keyword 和 text。

 

抛开复杂的理论,我们先来了解一下 ES 对文本内容搜索基本的两个方法: term 和 match 。

 

一、初识 term 与 match

 

先创建一个测试索引并放入两条数据。


PUT my-index-000001
{
  "mappings": {
    "properties": {
      "full_text": { "type": "text" }
    }
  }
}
PUT my-index-000001/_doc/1
{
  "full_text":   "quick brown foxes!"
}
PUT my-index-000001/_doc/2
{
  "full_text":   "Quick Foxes Brown !"
}

我们先使用 term 查询搜索一下关键词 foxes 。


GET my-index-000001/_search?pretty
{
  "query": {
    "term": {
      "full_text": "foxes"
    }
  }
}


返回结果为:


{
  ···
    "hits" : [
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.18232156,
        "_source" : {
          "full_text" : "quick brown foxes!"
        }
      },
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.18232156,
        "_source" : {
          "full_text" : "Quick Foxes Brown !"
        }
      }
    ]
  }
}

可以发现两条记录都命中了。我们再试试使用 foxes 后添加一个感叹号形成 "foxes!" 搜索一下。

 

GET my-index-000001/_search?pretty
{
  "query": {
    "term": {
      "full_text": "foxes!"
    }
  }
}

返回结果为空。


{
  ···
    "hits" : [ ]
  }
}

我们再使用 "brown foxes" 这两个关键词试验一下。


GET my-index-000001/_search?pretty
{
  "query": {
    "term": {
      "full_text": "brown foxes"
    }
  }
}

会发现返回结果也是为空。

 


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(2) https://developer.aliyun.com/article/1229942


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 Dart 数据库
重识Flutter状态管理 — 探索Flutter中的状态
我遇到过很多没有了解过响应式编程框架的,或者从事后端开发,自己想用Flutter写个app玩玩的朋友,一上来,不管在哪里都用`setState`,我问为啥不用状态管理,大部分都回了一句:啥是状态管理?
|
JSON 负载均衡 JavaScript
带你读《Elastic Stack 实战手册》之65:——3.5.19.1.Elasticsearch语言开发(Python)(上)
带你读《Elastic Stack 实战手册》之65:——3.5.19.1.Elasticsearch语言开发(Python)(上)
378 1
|
6月前
|
关系型数据库 Linux 数据库
PostgreSQL 入门指南:安装、配置与基本命令
本文从零开始,详细介绍如何在 Windows、Linux 和 macOS 上安装和配置 PostgreSQL,涵盖30+个实操代码示例。内容包括安装步骤、配置远程访问和用户权限、基础数据库操作命令(如创建表、插入和查询数据),以及常见问题的解决方案。通过学习,你将掌握 PostgreSQL 的基本使用方法,并为后续深入学习打下坚实基础。
5860 1
|
10月前
|
运维 监控 Devops
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第26天】DevOps作为一种将开发与运维紧密结合的文化和实践,通过促进团队协作与自动化流程,实现快速、稳定且高质量的软件交付。本文重点探讨持续交付与持续反馈两大支柱,通过实际案例和示例代码,展示其构建与实践过程。例如,使用Jenkins构建CI/CD流水线,通过Grafana和Prometheus实现实时监控,确保软件质量和快速响应。
148 1
|
10月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
993 1
|
存储 消息中间件 运维
单体应用与微服务的优缺点
单体应用(monolith application)就是将应用程序的所有功能都打包成一个独立的单元,可以是 JAR、WAR、EAR 或其它归档格式。
484 0
|
应用服务中间件 API 网络安全
运维笔记:宿主机转发实现多容器复用CA证书
运维笔记:宿主机转发实现多容器复用CA证书
170 4
|
Java 关系型数据库 数据库连接
连接池的工作原理
连接池的工作原理
|
消息中间件 Unix Linux
【探索Linux】P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
【探索Linux】P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
224 0
|
算法 计算机视觉
【MATLAB】 LMD信号分解+FFT傅里叶频谱变换组合算法
【MATLAB】 LMD信号分解+FFT傅里叶频谱变换组合算法
393 0