Я хочу отфильтровать критерии публикации:
SELECT * FROM posts WHERE (title LIKE '%AA%' OR subtitile LIKE '%BB%') AND category = 'Car'
Что я пытаюсь:
$finder = $this->container->get('fos_elastica.finder.website.article');
$boolQuery = new \Elastica_Query_Bool();
$fieldQuery = new \Elastica_Query_Text();
$fieldQuery->setFieldQuery('title', '*keyword*');
$fieldQuery->setFieldParam('title', 'analyzer', 'my_analyzer');
$boolQuery->addShould($fieldQuery);
$fieldQuery1 = new \Elastica_Query_Text();
$fieldQuery1->setFieldQuery('subtitle', '*keyword*');
$fieldQuery1->setFieldParam('subtitle', 'analyzer', 'my_analyzer');
$boolQuery->addShould($fieldQuery1);
$fieldQuery2 = new \Elastica_Query_Text();
$fieldQuery2->setFieldQuery('category', 'Car');
$boolQuery->addMust($fieldQuery2);
$data = $finder->find($boolQuery);
Я получаю ВСЕ посты из категории «Автомобиль», и часть этого поста содержит «ключевое слово», но мне нужно иметь только пост из категории «Автомобиль», какое ключевое слово contais «ключевое слово», но не ВСЕ
Как исправить мой код.
Заменить оба addShould
с addMust
,
Я также рекомендую использовать https://github.com/ongr-io/ElasticsearchBundle вместо https://github.com/FriendsOfSymfony/FOSElasticaBundle 🙂
Других решений пока нет …