首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:带有OR的多个字段的筛选

Elasticsearch:带有OR的多个字段的筛选
EN

Stack Overflow用户
提问于 2020-07-13 14:09:25
回答 1查看 905关注 0票数 1

我有文件索引。我希望筛选公开的文档,或者由我的组成员(用户1和3)共享给组的文档。

隐私= "public“或(隐私= "group”和user_id in (1,3))

我可以分开做,但是如何将它们与OR结合起来呢?

代码语言:javascript
复制
"filter" : [
            {"terms" : { "privacy" : ["public"]}},
        ]
代码语言:javascript
复制
"filter" : [
            {"terms" : { "privacy" : ["group"]}},
            {"terms" : { "user_id" : [1,3]}},
        ]

文档:

Company"}

  • {"id":4,
  • {"id":1,"user_id":1,“隐私”:“public”,"title":"Cooking for One",}
  • {"id":3,"user_id":1,“隐私”:“group”,"title":"Three's
  • “user_id:2,”隐私“:”public“,“标题”:“通向Diet"}
  • {"id":6,的四种方式”(User_id):2,“隐私”:“组”,“标题”:“6 O‘’Clock News"}
  • {"id":7,”user_id:3,“隐私”:“公共”,“标题”:“Lucky Seven"}
  • {"id":9,”user_id:3,“隐私”:“group”,“标题”:“九只动物画”}

正确的查询将返回文档1、3、4、7、9,但不返回6。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-13 14:31:33

诀窍是将两个子查询封装在bool中-应该:

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "should": [
        {
          "terms": { "privacy": [ "public" ] }
        },
        {
          "bool": {
            "filter": [
              {
                "terms": { "privacy": [ "group" ] }
              },
              {
                "terms": { "user_id": [ 1, 3 ] }
              }
            ]
          }
        }
      ]
    }
  }
}

note the difference介于mustfilter之间。filter博士放弃评分。

编辑:

代码语言:javascript
复制
{
  "terms":{
    "privacy":[
      "public"
    ]
  }
}

大致相同(除上文讨论的得分部分外)

代码语言:javascript
复制
{
  "bool":{
    "filter":{
      "terms":{
        "privacy":[
          "public"
        ]
      }
    }
  }
}

它完全相当于

代码语言:javascript
复制
{
  "bool":{
    "filter":[
      {
        "terms":{
          "privacy":[
            "public"
          ]
        }
      }
    ]
  }
}

这只是一个冗长的问题。

编辑2:重写的查询,包括两个过滤器

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "terms": { "privacy": [ "public" ] }
              }
            ]
          } 
        },
        {
          "bool": {
            "filter": [
              {
                "terms": { "privacy": [ "group" ] }
              },
              {
                "terms": { "user_id": [ 1, 3 ] }
              }
            ]
          }
        }
      ]
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62877688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档