検索コンテナで以下を使用して、特定のグループのプロジェクトを検索します。
SearchContext searchContext = SearchContextFactory.getInstance(request);
searchContext.setStart(searchContainer.getStart());
searchContext.setKeywords(keywords);
searchContext.setEnd(searchContainer.getEnd());
results = ProjectLocalServiceUtil.getSearchedProjects(searchContext);
total = ProjectLocalServiceUtil.getSearchedProjectsCount(searchContext);
getSearchedProjectsメソッドは、検索結果からプロジェクトのリストに変換します。
public List<Project> getSearchedProjects(SearchContext context) throws SearchException {
Indexer indexer = IndexerRegistryUtil.getIndexer(Project.class);
Hits results = indexer.search(context);
List<Project> projects = new ArrayList<Project>();
for (int i = 0; i < results.getDocs().length; i++) {
com.liferay.portal.kernel.search.Document doc = results.doc(i);
long projectId=GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK));
Project project = null;
try {
project = ProjectLocalServiceUtil.getProject(projectId);
projects.add(project);
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
return projects;
}
結果は、projectIndexerのdoGetDocumentメソッドで設定したグループで参照されているグループに検索ポートレットを配置した場合の予想どおりです。
document.addKeyword(Field.GROUP_ID, groupId);
document.addKeyword(Field.SCOPE_GROUP_ID, groupId);
しかし、ポートレットを使用して別のグループから検索したいと思います。
を使用して、ポートレットにgroupIdのリストを設定しようとしました
searchContext.setGroupIds(new long[] {projectHolder.getGroupId()});
しかし、それでも検索結果は得られません。
「グループ全体」を検索する方法についてのポインタはありますか?
アラン