Elasticsearch for laravel — Получить документы, соответствующие одной или нескольким категориям?

Следующий код работает для меня и возвращает сообщения в блоге, соответствующие запросу

 $params = [
'index' => 'blog',
'type' => 'post',
'body' => [
'query' => [
'multi_match' => [
'query' => $request->get('query'),
'fields' => ['title', 'description']
]
]
]
];
$response = \Elasticsearch::search($params); // works perfect

Как я могу изменить код выше, чтобы я мог получить все документы, их категория соответствует одному из $ категории ценности

Переменная $ Categories — это переменная, которую я получаю из флажков,

Я попытался с кодом ниже, но по какой-то причине он возвращает пустой результат:

 // $categories = $request->get('categories');
$categories = ["News", "Technology"];
$params = [
'index' => 'blog',
'type' => 'post',
'body' =>  [

"query"=> [
"filtered"=> [
"query"=> [
"match_all"=> []
],
"query"=>[
"terms"=> [
"category"=> $categories
]
]

]
]
]
];

$response = \Elasticsearch::search($params); // return 0 hits

Любая идея о том, как я могу получить документы, основанные на одной или нескольких категориях вместо того, чтобы получать их на основе совпадающих слов?

1

Решение

У вас есть два query пункты на том же уровне внутри filtered пункт, который не допускается.

"query"=> [
"filtered"=> [
"query"=> [  <-- (1)
"match_all"=> []
],
"query"=>[ <-- (2)
"terms"=> [
"category"=> $categories
]
]

]

Если вы пытаетесь запросить только категории, вы должны удалить первое предложение. Вы можете написать свой запрос как

                  "query"=> [
"filtered"=> [
"query"=>[
"terms"=> [
"category"=> $categories
]
]
]
]
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]