文章      动态     相关文章     最新文章     手机版动态     相关动态     |   首页|会员中心|保存桌面|手机浏览

wenzh

http://fabua.ksxb.net/comwenzh/

相关列表
文章列表
  • 暂无文章
推荐文章
联系方式
  • 联系人:张中
  • 电话:13277260776
  • 传真:0719-8025036
elasticSearch(四):还在无脑使用match、term么?
发布时间:2024-12-13        浏览次数:0        返回列表

介绍

检索是es最核心的功能,它能够快速、精准的从海量数据中检索出用户最想要的数据。而在es中有很多查询关键词,如:match、term、math_pharse等,它们应用在各种检索场景下,使用错了关键词会导致准确性、查询速度大打折扣。

elasticSearch(四):还在无脑使用match、term么?

检索分类

精确匹配

精确匹配是es中根据确切的值查询文档的方式;精确匹配不对文档进行分词处理,它是将整个文档当作一个完整的词条,查询的关键词必须与文档中的词一模一样,才会被查询回来。它的目的主要应用于结构化数据,例如:主键、标签等内容。

全文检索

全文检索es中一种对文档内容进行深入分析和处理的方式,以便查询到与之有关的文档。它通常考虑词汇的语义关联等,并根据文档与查询关键字的相关程度来进行评分。它主要根据文档的分词器有关,分词器会对文档进行深度处理,把文档拆分成若干个词汇。全文检索主要应用于非结构化文本数据,例如:文档、评价等。

组合索引

组合查询是将多个查询条件组合在一起的检索方式。用户可以根据多个因素来定位相关的文档,从而实现较为复杂的查询。

示例

在平时工作中最常见的就是精确匹配、全文检索、组合这三种;下面会挑一些常用的关键词详细介绍。

数据准备:

bash

查看它的分词

sql

term

bash

第一个命令的结果是空,因为分词后没有“俄罗斯”这个词语,没办法完全匹配,如果把title的属性只设置为keyword,则不会对“德玛西亚”进行分词就可以匹配到。第二个命令会返回“俄罗斯与乌克兰”这条数据因为分词后有“俄”这个词。

terms

terms主要应用于多个值的精确匹配场景,它允许用户在单个查询中指定多个值来进行精确的匹配。例如

bash

range

它是一种范围检索,允许用户查询一段范围内容的数据。它支持多种比较操作符:gt、gte、lt、lte等。示例

 

bash

exists

它用于筛选索引中具有特定字段值的文档。它适用于检查文档是否存在某个字段,或者该字段是否包含非空值。示例

 

bash

wildcard

wildcard支持通配符匹配,它允许在检索时使用通配符边大师来匹配文档的字段值。
:表示0个或者多个字符,可用于匹配人意长度的字符串。
:表示一个字符,用于匹配任意单个字符。
这种查询会匹配索引中的全部文档,实际开发中慎重使用。

 

bash

prefix

前缀索引,它允许根据指定前缀查询文档的字段值,它适合查询以特定字符开头的字段。例如

 

bash

term_set

它是es中功能比较强大的检索类型;主要解决多值字段的文档匹配问题,在处理具有多个属性的复杂数据时非常有用。它的核心功能在于匹配一定数量给定词项的文档,其中匹配的数量可以是固定值,也可以是动态值。示例:查询给定标签,并且每年至少学会一个标签的英雄。

 

lua

fuzzy

平时在搜索的时候难免会有打错字的时候,此时fuzzy就派上了用场。如

 

bash

match全文检索

match检索适合应用于高召回率和结果精确要求比较低的场景;它的本质上由bool检索和term检索相结合构成的,这意味着在确保较高召回率的前提下,它会牺牲一定的精确度和性能来满足各种查询需求。 当使用match对一个值进行查询时,会先对该值进行分词,分词后再以bool组成term进行查询。例

 

bash

此时会召唤回来两条"德玛西亚"因为分数更高会在最前面,“德玛皇子”匹配度较低排在后面。

match_phrase

它适用于注重精确度的召回场景,与match不同,它更适合成为短语匹配查询。因为它要求查询的词条顺序和文档中的词条顺序保持一致,所以它的精确度会更高。例

 

bash

当使用match_phrase时只能召回回来"德玛皇子",而使用match时可以把两个都召回回来。

multi_match

它适用于多个字段上支持match的场景,由于该方法同时检索多个字段所以性能上会比单个检索更快。例

 

bash

bool

bool组合检索是一种功能强大的查询方式,当需要同时满足多个条件时可以采用bool关键词。它主要包括四种子查询:

  1. must:查询结果必须满足指定条件
  2. must_not:查询条件必须不满足指定条件。
  3. filter:过滤条件;使用filter时会缓存数据提高查询性能。
  4. should:查询时满足部分条件,由minimum_should_match参数控制。
 

bash