谷粒商城实战笔记-116-全文检索-ElasticSearch-进阶-filter过滤
创始人
2024-11-13 20:38:53
0

文章目录

  • 1,filter简介
  • 2,代码实战

1,filter简介

在Elasticsearch中,布尔查询(Boolean Query)除了包含mustmust_notshould子句之外,还有一个重要的子句叫做filter

filter子句在布尔查询中扮演着过滤的角色,用于指定文档必须满足的条件,在语义上,和must非常相近,但与must不同的是,filter子句不会影响文档的相关性得分(_score)。

以下是filter子句的一些关键特点:

  1. 过滤作用filter子句用于过滤结果,确保返回的文档集合满足特定的条件。
  2. 不计分:与must不同,filter子句不会对文档的得分产生影响。这意味着即使文档满足filter条件,也不会提高其在搜索结果中的排名。
  3. 缓存filter子句通常可以利用Elasticsearch的缓存机制,这可以提高查询性能,尤其是对于大数据集。
  4. 组合使用filter子句可以与其他子句(如mustmust_notshould)结合使用,以构建更复杂的查询。

filter子句可以包含多种类型的查询,例如:

  • term:用于精确匹配字段值。
  • terms:用于匹配字段值的多个可能选项。
  • range:用于匹配数值或日期字段的某个范围内的值。
  • exists:检查字段是否存在于文档中。
  • bool:嵌套的布尔查询,用于组合多个过滤条件。

2,代码实战

下面是一个包含filter子句的布尔查询示例:

GET bank/_search {   "query": {     "bool": {       "must": [         {           "match": {             "gender": "M"           }         },         {           "match": {             "address": "mill"           }         }       ],       "must_not": [         {           "match": {             "age": "18"           }         }       ],       "should": [         {           "match": {             "lastname": "Wallace"           }         }       ],       "filter": [         {           "range": {             "age": {               "gte": 20,               "lte": 30             }           }         }       ],        "minimum_should_match": 1     }   } } 

这个布尔查询(Boolean Query),其中包含mustmust_notshouldfilter子句。

  • GET bank/_search:这是一个HTTP GET请求,用于在Elasticsearch的bank索引中执行搜索。

  • query:定义了搜索的具体条件。

  • bool:布尔查询,用于组合不同类型的子查询。

    • must:必须满足的条件。文档必须满足must中的所有条件才会被包含在搜索结果中。

      • 性别(gender)必须是"M"。
      • 地址(address)必须是"mill"。
    • must_not:必须不满足的条件。如果文档满足must_not中的任何条件,它将不会被包含在搜索结果中。

      • 年龄(age)不能是18岁。
    • should:可选条件,用于提高满足条件的文档的相关性得分,但不是必需的。

      • 姓氏(lastname)是"Wallace"的文档可能会获得更高的得分。
    • filter:过滤条件,用于确保文档满足特定的非得分相关条件。在这个查询中,filter子句包含一个range查询:

      • 年龄(age)必须在20岁到30岁之间(包括20岁和30岁),这是通过range查询的gte(大于等于)和lte(小于等于)参数实现的。
    • minimum_should_match:至少需要满足的should条件数量。在这个查询中,设置为1,意味着至少有一个should条件需要被满足。

filter子句:

  • filter子句用于过滤结果,返回的文档集合必须满足filter条件,但这些条件不会影响文档的相关性得分。
  • 在这个查询中,filter子句使用了一个range查询,它指定了年龄的范围。这意味着所有返回的文档,除了必须满足mustmust_not条件外,还必须有年龄在20到30岁之间。
  • 使用filter子句可以提高查询性能,特别是对于大数据集,因为Elasticsearch可以利用缓存机制。

总结来说,查询将返回满足以下条件的文档:

  • 性别为男性(“M”)。
  • 地址包含"mill"。
  • 年龄不是18岁,并且年龄在20到30岁之间。
  • 姓氏为"Wallace"的文档可能会获得更高的得分,但至少需要满足一个should条件。

相关内容

热门资讯

据玩家消息!hhpoker智能... 据玩家消息!hhpoker智能辅助插件,hhpoker真能买到挂吗(透视)步骤脚本(一直是有挂)-哔...
近期!佛手在线大菠萝辅助,po... 近期!佛手在线大菠萝辅助,pokemmo手机版修改器(透视)技法教程(一贯真的是有挂)1、完成佛手在...
据通报!微信小程序雀神挂件怎么... 据通报!微信小程序雀神挂件怎么安装,情怀打七开辅助(透视)挂-竟然是有挂1、微信小程序雀神挂件怎么安...
透视新版!皇豪互众插件,微乐自... 您好,微乐自建房免费辅助入口在哪里这款游戏可以开挂的,确实是有挂的,需要了解加去威信【1367043...
出现新变化!wpk俱乐部有没有... 出现新变化!wpk俱乐部有没有辅助,wpk辅助哪里买(透视)指引脚本(切实真的是有挂)-哔哩哔哩一、...
围绕透视问题!智星菠萝有挂吗,... 围绕透视问题!智星菠萝有挂吗,newpoker怎么安装脚本(透视)课程教程(都是真的有挂)1、围绕透...
透视软件!决战卡五星辅助源码,... 透视软件!决战卡五星辅助源码,新上游通用挂(开挂)其实是有挂(有挂辅助)-哔哩哔哩1、决战卡五星辅助...
相较于以往!菠萝神器辅助工具,... 相较于以往!菠萝神器辅助工具,玄龙辅助下载(透视)方法-总是是有挂1、完成菠萝神器辅助工具有辅助插件...
现场直击!hhpoker有透视... 现场直击!hhpoker有透视功能吗,hhpoker哪个俱乐部靠谱(透视)大纲脚本(真是是有挂)-哔...
最新消息!wepoker私人定... 最新消息!wepoker私人定制透视,约局吧是否有挂(透视)经验教程(确实有挂)1、全新机制【wep...