PHP用のElasticaとruflinライブラリでクエリを作成するのが苦労しています。私が従うことができる多くの例はありません。ruflinでクエリを作成するエラスティック検索symfony3
私は、次のフィールドで構成されてsymfonyプロジェクトでUser
エンティティ持っ
: 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:ObjectまたはClient:Objectのいずれかが表示されます。この場合、私はメンバーが存在することを確認したい。$fieldQuery = new Filtered(); $fieldQuery->setFilter(new Exists('member')); $boolQuery->addMust($fieldQuery); $users = $finder->find($boolQuery);
問題は、それが動作しない...ということです。それは私に0の結果を示しています。どのようにプレイしても、結果は0か間違っています。
上記の条件に基づいて結果を得るために、Elasticaのruflinライブラリを使用して適切なクエリを作成する方法を教えてもらえますか?
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:
私は() 'メンバー'(存在する)第三クエリを修正するためにうまく管理しています。私は、config.yml
にマッピングの下にclient
とmember
を入れるのを忘れていたことが判明しました。まだ2番目のクエリは失敗します。
@ruflinこれはあなたのためです;-) – Val
愚かな質問はありませんので、私は1つ質問します: "ユーザーのインデックスを作成しましたか?" – malcolm
はい:私はユーザーのインデックスを作成しました。スタジオ(最初のクエリ)で適切にフィルタリングしますが、MoreLikeThisとExistsではそうではありませんが、Johnが存在していてもメンバーのプロパティは0になっています。 – undefinedman