gpt4 book ai didi

Elasticsearch:使用 OR 过滤多个字段

转载 作者:行者123 更新时间:2023-12-03 01:15:09 26 4
gpt4 key购买 nike

我有一个文档索引。我想过滤公开的文档,或者由我的群组成员(用户 1 和 3)共享给群组的文档。
隐私=“公共(public)”或(隐私=“组”和(1,3)中的用户ID)
我可以单独做它们,但是如何将它们与 OR 结合起来?

"filter" : [
{"terms" : { "privacy" : ["public"]}},
]
"filter" : [
{"terms" : { "privacy" : ["group"]}},
{"terms" : { "user_id" : [1,3]}},
]
文件:
  • {"id":1,"user_id":1, "privacy":"public","title":"Cooking for One",}
  • {"id":3,"user_id":1, "privacy":"group","title":"Three's Company"}
  • {"id":4,"user_id":2, "privacy":"public","title":"四种节食方法"}
  • {"id":6,"user_id":2, "privacy":"group","title":"六点新闻"}
  • {"id":7,"user_id":3, "privacy":"public","title":"幸运七"}
  • {"id":9,"user_id":3, "privacy":"group","title":"要画的九只动物"}

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

    最佳答案

    诀窍是将两个子查询包装在 bool-should 中:

    {
    "query": {
    "bool": {
    "should": [
    {
    "terms": { "privacy": [ "public" ] }
    },
    {
    "bool": {
    "filter": [
    {
    "terms": { "privacy": [ "group" ] }
    },
    {
    "terms": { "user_id": [ 1, 3 ] }
    }
    ]
    }
    }
    ]
    }
    }
    }
    仅供引用: note the difference must之间和 filter . TL;DR filter放弃得分。

    编辑:
    {
    "terms":{
    "privacy":[
    "public"
    ]
    }
    }
    大致相当于(除了上面讨论的评分部分)
    {
    "bool":{
    "filter":{
    "terms":{
    "privacy":[
    "public"
    ]
    }
    }
    }
    }
    这完全等同于
    {
    "bool":{
    "filter":[
    {
    "terms":{
    "privacy":[
    "public"
    ]
    }
    }
    ]
    }
    }
    这只是冗长的问题。

    编辑 2:重写的查询包括 2 个过滤器
    {
    "query": {
    "bool": {
    "should": [
    {
    "bool": {
    "filter": [
    {
    "terms": { "privacy": [ "public" ] }
    }
    ]
    }
    },
    {
    "bool": {
    "filter": [
    {
    "terms": { "privacy": [ "group" ] }
    },
    {
    "terms": { "user_id": [ 1, 3 ] }
    }
    ]
    }
    }
    ]
    }
    }
    }

    关于Elasticsearch:使用 OR 过滤多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62877688/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com