过滤具有多个值的字段

Posted

技术标签:

【中文标题】过滤具有多个值的字段【英文标题】:Filtering Field with multiple values 【发布时间】:2019-04-23 00:04:58 【问题描述】:

我将如何解决以下问题: 我想过滤包含多个值的字段(例如[“value1”,“value2”,“value3”])。

过滤器还将包含多个值(例如 ["value1", "value2"]。 我只想取回与过滤器具有相同字段值的项目,例如。字段为 ["value1", "value2"],过滤器也为 ["value1", "value2"]

任何帮助将不胜感激

【问题讨论】:

这个答案可能会有所帮助(即使它是在 groovy 中,之前是无痛的):***.com/questions/31156108/… 【参考方案1】:

我认为最近添加的 (v6.1) terms_set query(Val 引用了他在评论中链接的问题)就是您想要的。

terms_set 与常规 terms 不同,它有一个参数来指定搜索词与字段中包含的词之间必须存在的最小匹配数。

给定:

PUT my_index/_doc/1
 
    "values": ["living", "in a van", "down by the river"],

PUT my_index/_doc/2

    "values": ["living", "in a house", "down by the river"],

terms 查询 ["living", "in a van", "down by the river"] 将返回给您两个文档:不好。 terms_set 配置为需要所有三个匹配项(脚本 params.num_terms 计算为 3)可以只为您提供匹配项:

GET my_index/_search

    "query":  
        "terms_set": 
            "values": 
                "terms": ["living", "in a van", "down by the river"],
                "minimum_should_match_script": 
                  "source": "params.num_terms"
                
                        
        
    

注意:虽然我在上面的示例中使用了minimum_should_match_script,但它并不是一个非常有效的模式。替代的minimum_should_match_field 是更好的方法,但在示例中使用它意味着需要更多的 PUT 来将必要的字段添加到文档中,所以我很简洁。

【讨论】:

这有很大帮助,唯一的问题是我们目前低于 6.1 版,因此实施必须等到我们升级。谢谢。

以上是关于过滤具有多个值的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mongoose 查询过滤到数组类型字段中具有指定值的文档?

基于具有唯一值的数组创建多个动态选择过滤器以过滤 Vue.js 中的另一个数组

过滤和排序具有多个值的多维数组

Access 2010:根据特定组合框条件过滤字段中包含多个值的报表

有没有办法在 MongoDB 中创建一个具有多个值的过滤器?

如何使用 jQuery 和 CSS 过滤具有多个值的列表?