У меня есть эластичный поисковый запрос, который работает с фильтром multi_match и range, но я не могу определить правильный синтаксис для добавления фильтра терминов.
Я используюasticsearch версии 7.1.0.
Это запрос, который работает:
{
"body": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "nuclear power"
}
},
"filter": {
"range": {
"displaydate": {
"gte": "2019-07-02T16:26:04Z"
}
}
}
}
}
}
}
Возвращает все документы из моего индекса, которые соответствуют фразе «ядерная энергия» и имеют дату отображения после 2019-07-02 16: 26.
Теперь я хочу иметь возможность фильтровать запрос, чтобы он возвращал результаты только определенного типа. В индексе есть поле с именем object_type, в котором хранится тип объекта каждого элемента в индексе.
Я хочу вернуть результаты с типом объекта «Core_Page» или «Module_Page». Я использовал «термины» вместо «термин», потому что «термин» не поддерживает массив значений.
Вот как я добавил фильтр терминов:
{
"body": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "nuclear power"
}
},
"filter": {
"terms": {
"object_type": [
"Core_Page",
"Module_Page"
]
},
"range": {
"displaydate": {
"gte": "2019-07-02T16:16:50Z"
}
}
}
}
}
}
}
но теперь я получаю ошибку синтаксического анализа от ElasticSearch:
Elasticsearch\Common\Exceptions\BadRequest400Exception:
{
"error":
{"root_cause":
[
{
"type":"parsing_exception",
"reason":"[terms] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line":1,
"col":142
}
],
"type":"parsing_exception",
"reason":"[terms] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line":1,
"col":142
},
"status":400
}
Как я могу структурировать запрос так, чтобы он имел смысл для анализатора ElasticSearch?