我在搜索容器中使用以下内容来查找给定组中的项目:
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;
}
当搜索 portlet 放置在我在 projectIndexer 的 doGetDocument 方法中设置的组中引用的组中时,结果与我预期的一样:
document.addKeyword(Field.GROUP_ID, groupId);
document.addKeyword(Field.SCOPE_GROUP_ID, groupId);
但我想使用 portlet 从另一个组中搜索。
我尝试在 portlet 中设置 groupIds 列表,使用
searchContext.setGroupIds(new long[] {projectHolder.getGroupId()});
但我仍然没有在搜索中得到任何结果。
关于如何搜索“跨组”的任何指示?
阿兰