У меня трудные времена с библиотекой Elastica и ruflin для PHP для создания запросов. Я не могу привести много примеров.Создание запросов в ruflin Упругий поиск Symfony3
У меня есть User
сущность в проекте Symfony, который состоит из следующих полей: firstName
, lastName
, emailAddress
, studio
и member
или client
(зависело от того, что пользователь является)
Так что теперь я хотел бы, чтобы отфильтровать некоторые результаты.
Я хочу, чтобы отобразить только для пользователей, соответствующие определенной студии:
$finder = $this->get('fos_elastica.finder.app.user'); $boolQuery = new BoolQuery(); $fieldQuery = new Match(); $fieldQuery->setFieldQuery('studio', 'StackOverflow studio'); $boolQuery->addMust($fieldQuery);
Я хочу, чтобы отобразить всех пользователей с именем
John
:$fieldQuery = new MoreLikeThis(); $fieldQuery->setFields(['firstName', 'lastName', 'emailAddress']); $fieldQuery->setLikeText('John'); $boolQuery->addMust($fieldQuery);
Я хочу, чтобы члены эта студия (не клиенты) Примечание: Пользователь имеет отношение к
Client
иMember
. В зависимости от этого в нем будет показан элемент: объект или клиент: объект. В этом случае я хочу быть уверенным, что Member существует.$fieldQuery = new Filtered(); $fieldQuery->setFilter(new Exists('member')); $boolQuery->addMust($fieldQuery); $users = $finder->find($boolQuery);
Проблема заключается в том, что ... он не работает. Это показывает мне 0 результатов. Независимо от того, как я играю с этим, это показывает мне 0 результатов или неправильных результатов.
Может ли кто-нибудь помочь мне создать правильный запрос, используя библиотеку ruflin для Elastica, чтобы получить результаты, основанные на условиях, упомянутых выше?
RAW QUERY:
{
"query":{
"bool":{
"must":[
{
"match":{
"studio":{
"query":"StackOverflow studio"
}
}
},
{
"filtered":{
"filter":{
"exists":{
"field":"member"
}
}
}
},
{
"more_like_this":{
"fields":[
"firstName",
"lastName",
"emailAddress"
],
"like_text":"John"
}
}
]
}
}
}
UPDATE 1:
Я сведущих исправить 3-й запрос (Exists ('член')). Оказалось, что я забыл поставить client
и member
под сопоставлениями в config.yml
. По-прежнему выполняется второй запрос.
@ruflin это для вас ;-) – Val
Нет глупых вопросов, поэтому я собираюсь задать один вопрос: «Вы проиндексировали пользователей?» – malcolm
Да :) Я проиндексировал пользователей. Он правильно фильтрует на студию (первый запрос), но на MoreLikeThis и Exists нет, дает 0 результатов, даже несмотря на то, что Джон действительно существует и имеет право на членство. – undefinedman