Следующий код работает для меня и возвращает сообщения в блоге, соответствующие запросу
$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
Любая идея о том, как я могу получить документы, основанные на одной или нескольких категориях вместо того, чтобы получать их на основе совпадающих слов?
У вас есть два query
пункты на том же уровне внутри filtered
пункт, который не допускается.
"query"=> [
"filtered"=> [
"query"=> [ <-- (1)
"match_all"=> []
],
"query"=>[ <-- (2)
"terms"=> [
"category"=> $categories
]
]
]
Если вы пытаетесь запросить только категории, вы должны удалить первое предложение. Вы можете написать свой запрос как
"query"=> [
"filtered"=> [
"query"=>[
"terms"=> [
"category"=> $categories
]
]
]
]
Других решений пока нет …