Solr でクエリを作成しようとすると、少し問題が発生します。問題は、指定されたフィールドに同じ値を持つドキュメントを取得できなければならないが、指定されたユーザーに対してこの値が X 回以上表示された場合にのみ取得する必要があることです。疑似SQLでは、次のようになります。
select user_id from documents
where my_field="my_value"
and
(select count(*) from documents where my_field="my_value" and user_id=super.user_id) > X
作成したクエリごとに solr が「numFound」を返すことは知っていますが、サブクエリでこの値を取得する方法がわかりません。
My Solr は、ユーザーがドキュメントであり、ユーザーのプロパティ (名前、年齢など) が「root_id」フィールドを持つ別のドキュメントにグループ化されるように編成されています。したがって、子の接頭辞が「some_prefix」であるすべてのルート ドキュメントを取得する次のクエリを想定してみましょう。
is_root:true AND _query_:"{!join from=root_id to=id}requests_prefix:\"some_prefix\""
では、「requests_prefix:"some_prefix"」またはその他の条件に一致する X 個を超える子を持つルート ドキュメント (ある意味ではユーザー) を取得するにはどうすればよいでしょうか? 出来ますか?
PS 単一のクエリで実行する必要があります。フィールドは自由に追加できますが、ルート/子構造は (優先的に) 保持する必要があります。