Elasticsearch 查询语法

Elasticsearch query syntax

我有一个映射如下的索引

  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "id": {
        "type": "integer"
      },
      "is_active": {
        "type": "boolean"
      },
      "attributes": {
        "dynamic": true,
        "properties": {
          "subjects": {
            "type": "integer"
          },
          "occupation": {
            "type": "integer"
          }
        }

现在我想获取所有职业 =4 且名称不像 'Test' 和 is_active = True 的文档 我写了以下内容以获取所有带有 is_active=True 和职业 4 的文档,但我不确定如何过滤掉名称包含 'test'

的文档
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "terms": {
                  "audience_attributes.occupation": [
                    4
                  ]
                }
              }
            ]
          }
        },
        {
          "terms": {
            "is_active": [
              true
            ]
          }
        }
      ]
    }
  }
}

我正在使用 Elasticsearch 7.9

我想我明白了

{
  "query": {
    "bool": {
      "must_not": {
        "wildcard": {
          "name": {
            "value": "*TEST*"
          }
        }
      },
      "must": [
        {
          "bool": {
            "should": [
              {
                "terms": {
                  "audience_attributes.occupation": [
                    4
                  ]
                }
              }
            ]
          }
        },
        {
          "terms": {
            "is_active": [
              true
            ]
          }
        }
      ]
    }
  }
}