热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

筛选包含任何给定值的数组

如何解决《筛选包含任何给定值的数组》经验,为你挑选了3个好方法。

我有一套像

{
    tags:['a','b','c']
    // ... a bunch properties
}

如标题所述:有没有办法使用Nest过滤包含任何给定标签的所有文档?

例如,上面的记录将匹配['c','d']

或者我应该手动构建多个"OR"?



1> slawek..:

还有一些术语查询,可以为您节省一些工作.这里来自docs的例子:

{
  "terms" : {
      "tags" : [ "blue", "pill" ],
      "minimum_should_match" : 1
  }
}

在引擎盖下它构造布尔应该.所以它与上面的基本相同,但更短.

还有一个相应的术语过滤器.

因此,总结一下您的查询可能如下所示:

{
  "filtered": {
    "query": {
      "match": { "title": "hello world" }
    },
    "filter": {
      "terms": {
        "tags": ["c", "d"]
      }
    }
  }
}

随着标签数量的增加,这可能会使长度产生很大差异.


不推荐使用`minimum_should_match`并且会失败.

2> Nick Zadrozn..:

编辑:下面的bitset东西可能是一个有趣的读物,但答案本身有点过时了.其中一些功能在2.x中发生了变化.此外,Slawek在另一个答案中指出,terms在这种情况下,查询是一种简单的方法来干扰搜索.在最后重构当前的最佳实践.-nz

您可能想要一个Bool查询(或者更可能是与另一个查询一起使用Filter)和一个should子句.

该布尔查询有三个主要属性:must,should,和must_not.其中每个都接受另一个查询或查询数组.条款名称相当不言自明; 在您的情况下,该should子句可以指定一个列表过滤器,与其中任何一个匹配将返回您正在寻找的文档.

来自文档:

在没有must子句的布尔查询中,一个或多个should子句必须与文档匹配.可以使用minimum_should_match参数设置要匹配的最小条件子句数.

以下是Bool查询可能孤立的示例:

{
  "bool": {
    "should": [
      { "term": { "tag": "c" }},
      { "term": { "tag": "d" }}
    ]
  }
}

这是另一个Bool查询作为更通用的过滤查询中的过滤器的示例:

{
  "filtered": {
    "query": {
      "match": { "title": "hello world" }
    },
    "filter": {
      "bool": {
        "should": [
          { "term": { "tag": "c" }},
          { "term": { "tag": "d" }}
        ]
      }
    }
  }
}

是否使用Bool作为查询(例如,影响匹配的分数),或者作为过滤器(例如,减少随后被评分或后过滤的命中)是主观的,这取决于您的要求.

除非你有理由使用And/Or/Not(这样的理由确实存在),否则通常最好使用Bool来支持Or Filter.Elasticsearch博客提供了有关每种实现的不同实现的更多信息,以及何时可能更喜欢Bool over And/Or/Not的好例子,反之亦然.

Elasticsearch博客:所有关于Elasticsearch过滤器位集

使用重构查询进行更新...

现在,完成所有这些后,terms查询就是上述所有内容的DRYer版本.它对于引擎下的查询类型做了正确的事情,它的行为与使用选项的bool+ 相同,总体来说有点简洁.shouldminimum_should_match

这是最后一个查询重构了一下:

{
  "filtered": {
    "query": {
      "match": { "title": "hello world" }
    },
    "filter": {
      "terms": {
        "tag": [ "c", "d" ],
        "minimum_should_match": 1
      }
    }
  }
}


minimum_should_match现已弃用

3> mdmjsh..:

尽管这是一个古老的问题,但我最近还是自己遇到了这个问题,并且不赞成此处的某些答案(正如评论所指出的那样)。因此,为了其他可能在这里绊倒的人的利益:

一个term查询可以用来查找反向索引指定的确切期限:

{
  "query": {
   "term" : { "tags" : "a" }
} 

从文档https://www.elastic.co/guide/zh/elasticsearch/reference/current/query-dsl-term-query.html

或者,您可以使用terms查询,该查询将使所有文档与给定数组中指定的任何项目匹配:

{
  "query": {
   "terms" : { "tags" : ["a", "c"]}
} 

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl-terms-query.html

需要注意的一个陷阱(这让我感到困惑)-如何定义文档也有所不同。如果您要搜索的字段已被索引为text类型,则Elasticsearch将执行全文搜索(即使用analyzed字符串)。

如果您已将该字段编入索引,keyword则将执行使用“未分析”字符串的关键字搜索。这可能有一个巨大的实际影响为分析字符串进行预处理(小写,标点符号下降等)见(https://www.elastic.co/guide/en/elasticsearch/guide/master/term-vs-full- text.html)

为避免出现这些问题,字符串字段已分为两种新类型:应该用于全文搜索的文本和应该用于关键字搜索的关键字。(https://www.elastic.co/blog/strings-are-dead-long-live-strings)


推荐阅读
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文讨论了如何在不使用SearchBar display controller的情况下,单独使用SearchBar并捕获其textChange事件。作者介绍了实际状况,即左侧SliderMenu中的SearchBar需要在主页TableView中显示搜索结果。然后,作者提供了解决方案和步骤,帮助读者实现这一功能。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
author-avatar
LEEstarmmmmm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有