布尔查询与elasticsearch中的独占条件不匹配

z4bn682m  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(301)

下一个问题是,我的数据结构是这样的: {"editions":['optionA', 'optionB']} 我需要排除此形状的所有结果: {"editions":['optionB']} 但包括此形状的所有结果: {"editions":['optionA']}{"editions":['optionA', 'optionB']} 更清楚的是,我需要排除所有在版本中只有一个条目的结果,他的值是 optionB 明确地。
我一直在尝试这样的事情:

bool: {
  must: [
    {
    query_string: {
        default_field: "name",
        query: `${params.text}*`
      },
    }
  ],
  must_not : {
    term : { "editions" : "optionB" },
    must : {
        script : {
            script : {
                inline: "doc['editions'].values.length < 2",
                lang: "painless"
             }
        }
    }
  }
}

但没有给出结果。提前谢谢!
警察:我用的是ElasticSearch7*

gorkyyrv

gorkyyrv1#

你的问题是有点混乱的b/c首先你提到 editions 但是你的剧本引用了 sections . 我们走吧 editions 然后。。。
由于您已经在使用脚本,因此可以执行以下操作:

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "name",
            "query": `${params.text}*`
          }
        },
        {
          "term": {
            "editions": {
              "value": "optionA"
            }
          }
        }
      ],
      "must_not": [
        {
          "script": {
            "script": {
              "inline": "doc['editions'].size() == 1 && doc['editions'][0] == 'optionB'",
              "lang": "painless"
            }
          }
        }
      ]
    }
  }
}

相关问题