Что не так с моим запросом Elastisearch?

Мне нужно сделать запрос multi_match и bool одновременно, но запрос ниже не работает :( Когда я использую их отдельно, они работают идеально.

{
  "query": {
    "multi_match": {
      "query": "kotlety*",
      "fields": [
        "name"
      ]
    },
    "bool": {
      "filter": {
        "term": {
          "status": 2
        }
      }
    }
  },
  "size": 24
}

ответ:

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "[multi_match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
                "line": 9,
                "col": 5
            }
        ],
        "type": "parsing_exception",
        "reason": "[multi_match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line": 9,
        "col": 5
    },
    "status": 400
}

Elastic 6.6, я думаю, мой запрос может иметь неправильный синтаксис?


person Paul    schedule 25.03.2019    source источник


Ответы (2)


Запрос не может содержать одновременно bool и multi_match. Вы можете перестроить его следующим образом:

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "status": 2
        }
      },
      "should": {
        "multi_match": {
        "query": "kotlety*",
        "fields": [
          "name"
        ]
      }
    }
  }
  },
  "size": 24
}
person Adam T    schedule 25.03.2019

Я изменил синтаксис, и этот запрос работает:

{
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "query": "kotlety*",
          "fields": [
            "name"
          ]
        }
      },
      "filter": {
        "term": {
          "status": 2
        }
      }
    }
  }
}
person Paul    schedule 25.03.2019