首页 > 其他分享 >ElasticSearch - match和term有什么区别

ElasticSearch - match和term有什么区别

时间:2024-07-21 11:18:32浏览次数:6  
标签:term 匹配 分析器 查询 ElasticSearch 分词 match

match 和 term 查询是两种常用的查询方式,在用途和行为上有着显著的差异:

1. match 查询
全文搜索:match 查询用于全文搜索场景。它在查询之前对字段值和查询字符串进行分词(tokenization)处理。

分析器(Analyzer)应用:match 查询会应用字段指定的分析器(如果有的话)来处理查询字符串。这意味着它会处理文本数据的大小写、同义词、停用词等。

应用场景:适合用于文本字段,如文章内容、产品描述等。

示例:

GET /_search
{
  "query": {
    "match": {
      "description": "quick brown fox"
    }
  }
}

  在这个例子中,如果description 字段包含了 “quick”、“brown”、“fox” 中的任何一个或全部词汇,文档就会被匹配。

2. term 查询
精确值匹配:term 查询用于精确值匹配。它不会对字段值或查询字符串进行分词处理。

不使用分析器:term 查询不会应用字段的分析器,它直接在倒排索引中查找准确的术语。

应用场景:适合用于关键字(keyword)、数字、日期等精确值字段。

示例:

GET /_search
{
  "query": {
    "term": {
      "status": "active"
    }
  }
}

  在这个例子中,只有当status字段的值完全是 “active”(区分大小写)时,文档才会被匹配。

关键区别

  • 分词处理:match 查询会对查询条件进行分词处理,而 term 查询不会。
  • 用途:match 通常用于全文搜索,能处理文本中的同义词、变体等;而 term 用于精确匹配,如过滤、分类标签匹配。
  • 灵活性:match 查询更适合处理人类语言中的复杂性和不确定性,而 term 查询更适合技术性和精确性较高的场景。

总结

了解这两种查询类型的区别,对于有效利用 Elasticsearch 进行数据检索至关重要。根据实际的数据特性和查询需求,选择适当的查询类型能显著提高搜索的准确性和效率。

标签:term,匹配,分析器,查询,ElasticSearch,分词,match
From: https://www.cnblogs.com/beatle-go/p/18314272

相关文章

  • Google OAuth2 redirect_uri_mismatch 在生产中出现错误,但在本地工作
    我正在开发一个项目,需要使用OAuth2身份验证更新组织的GoogleDrive令牌。我的代码在本地计算机上运行良好,但是当我将其部署到服务器时,遇到无效的错误redirect_url。这是我的代码的相关部分:defupdate_drive_gtoken(data:schema.UpdateDriveToken,sql:Session,......
  • Elasticsearch集群管理在分布式环境中的应用
    ......
  • docker部署Elasticsearch和Kibana
    1.Elasticsearch和Kibana介绍1.1什么是Elasticsearch?Elasticsearch是一个开源的分布式搜索和分析引擎,用于处理大规模数据的实时搜索、分析和存储。它构建在ApacheLucene搜索引擎库的基础上,提供了一个RESTfulAPI和易于使用的工具,使得在大数据量情况下进行搜索和分析变得高......
  • 使用 Elasticsearch Python SDK 查询 Easysearch
    随着数据分析需求的不断增长,高效查询和分析大数据集变得越来越重要。Easysearch作为一种强大的国产化搜索和分析引擎,同时作为Elasticsearch国产替代方案,支持原生DSL查询语法和SQL查询,确保原业务代码无需调整即可无缝迁移。Easysearch兼容ES7.x现有的SDK和索引存储格......
  • Spring Book Club + java查询数据库 + 百万数据 + 同步Elasticsearch(ES)+ 多线程 + Fei
    @FeignClient(name="bwie-elastic")publicinterfaceEsFeign{@PostMapping("/add")publicResultadd(@RequestBodyArrayList<ResourceInfo>resourceInfo);}@RestControllerpublicclassUserControllerimplementsApplica......
  • 深入探讨:在 Elasticsearch 6.8.18 中使用 Java 创建带有时间戳的索引
    深入探讨:在Elasticsearch6.8.18中使用Java创建带有时间戳的索引在这篇博客中,我们将深入探讨如何在Elasticsearch6.8.18中使用Java创建带有时间戳的索引。我们将使用Maven进行项目管理,并通过代码示例来详细说明每一步操作。希望这篇文章能帮助你更好地理解和使用Elas......
  • Mac终端美化(iterm2+oh-my-zsh+vim)
    vim+oh-my-zsh+git配置开发环境vim配置安装vundle使用vundle作为插件管理器,使用前先安装vundlemkdir-p~/.vim/bundlegitclonehttps://github.com/gmarik/Vundle.vim.git~/.vim/bundle/Vundle.vim 配置.vimrc编辑~/.vimrc文件,写入以下内容setnocompatible......
  • 自建elasticsearch迁移到阿里云
    迁移工具:elasticsearch-dump 前提:阿里云elasticsearch开启“自动创建索引” 一、安装elasticdump安装node.js。下载安装包。 wgethttps://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz解压。 tar-xfnode-v16.18.0-linux-x64.tar......
  • spring 服务端如何设置 If-None-Match 和 ETAG
    在Spring框架中,特别是使用SpringMVC或SpringBoot时,设置ETag和处理If-None-Match请求头通常是通过一些自定义的逻辑来实现的,因为SpringMVC本身不直接提供自动化的ETag生成和验证机制。不过,你可以通过以下几种方式来实现:1.使用拦截器(Interceptor)或过滤器(Filter)你可以创建一个......
  • Pycharm - Conda - PyCharm的终端(terminal)显示conda虚拟环境
    step1:点击file,进入setting  step2:进入setting后,选择Tools中的Terminal,并在Tabname中将地址位置修改为如图所示。  step3:进入Terminal后,地址前端就会显示目前选定的虚拟环境。  step4:如需要更改虚拟环境,有两种方法实现:方法一:直接在pycharm中修改环境,重新进入终......