Exist не находит документы с nested полем

Тут несколько проблем.

  • POST twit/1 создает документ с типом 1 и сгенерированным id
  • "tweet":{... } на верхнем уровне не нужен, либо вам его надо добавить в меппинг.
  • для поиска nested объектов надо использовать специальный запрос nested
  • в 5.x constant_score

Со всеми этими

PUT twit
{
  "mappings": {
    "tweet": {
      "properties": {
        "message": {
          "type": "nested"
        },
        "date":{
            "type":"text"
        }
      }
    }
  }
}

PUT twit/tweet/1
{
  "message": {
    "op":"ewr",
    "ds":"ds"
  },
  "date":"ccv"
}

PUT twit/tweet/2
{
  "message":{
    "fdgd":"dgs",
    "ds":"ds"
  },
  "date":"ccv"
}

GET twit/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "nested": {
          "path": "message",
          "query": {
            "exists": {
              "field": "message.op"
            }
          }
        }
      },
      "boost": 1.2
    }
  }
}

Если у вас только один message на tweet, то он должен быть не nested а object и тогда пример будет выглядить так

PUT twit
{
  "mappings": {
    "tweet": {
      "properties": {
        "message": {
          "type": "object"
        },
        "date":{
            "type":"text"
        }
      }
    }
  }
}

PUT twit/tweet/1
{
  "message": {
    "op":"ewr",
    "ds":"ds"
  },
  "date":"ccv"
}

PUT twit/tweet/2
{
  "message":{
    "fdgd":"dgs",
    "ds":"ds"
  },
  "date":"ccv"
}

GET twit/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "exists": {
          "field": "message.op"
        }
      },
      "boost": 1.2
    }
  }
}