【发布时间】:2014-09-01 17:47:39
【问题描述】:
我写了一个 lucene 搜索。一切都很好,但搜索返回每篇期刊文章的所有版本。如何对此搜索进行任何限制,使其仅返回期刊文章的最新版本?
这是一段搜索代码:
ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
HttpServletRequest httpServletRequest = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(actionRequest));
SearchContext searchContext = SearchContextFactory.getInstance(httpServletRequest);
BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);
BooleanQuery searchQuery = BooleanQueryFactoryUtil.create(searchContext);
searchQuery.addRequiredTerm(Field.TITLE, actionRequest.getParameter("searchText"));
if (actionRequest.getParameter("searchType").equals("content")) {
searchQuery.addRequiredTerm(Field.TYPE, "general");
searchQuery.addRequiredTerm("ddmStructureKey", "");
}
.
.
.
fullQuery.add(searchQuery, BooleanClauseOccur.MUST);
searchContext.setStart(QueryUtil.ALL_POS);
searchContext.setEnd(QueryUtil.ALL_POS);
searchContext.setAttribute("paginationType", "none");
Hits hits = SearchEngineUtil.search(searchContext, fullQuery);
List<Document> docs = hits.toList();
当我使用 portlet 3(搜索 portlet)搜索单词“datumu”时,我尝试获取搜索日志,这就是我得到的:
搜索查询 +(+(companyId:10154) +((+(entryClassName:com.liferay.portal.model.User) +(status:0)) (+(entryClassName:com.liferay.portlet.bookmarks. model.BookmarksEntry) +(status:0)) (+(entryClassName:com.liferay.portlet.bookmarks.model.BookmarksFolder) +(status:0)) (+(entryClassName:com.liferay.portlet.blogs.model. BlogsEntry) +(status:0)) (+(entryClassName:com.liferay.portlet.documentlibrary.model.DLFileEntry) +(status:0) +(hidden:false)) (+(entryClassName:com.liferay.portlet. documentlibrary.model.DLFolder) +(status:0) +(hidden:false)) (+(entryClassName:com.liferay.portlet.journal.model.JournalArticle) +(status:0) +(head:true)) ( +(entryClassName:com.liferay.portlet.journal.model.JournalFolder) +(status:0)) (+(entryClassName:com.liferay.portlet.messageboards.model.MBMessage) +(status:0) +(讨论: false)) (+(entryClassName:com.liferay.portlet.wiki.model.WikiPage) +(status:0)))) +(assetCategoryTitles:datumuassetCategoryTitles_sk_SK:datumu 资产标签名称:datumu em> cmets:datumu content:datumu description:datumu properties:datumu title:datumu url:datumu userName:datumu city:datumu country:datumu emailAddress:datumu firstName:datumu fullName :datumu lastName:datumu middleName:datumu region:datumu screenName:datumu street:datumu zip:datumu ddmContent:datumu extension:datumu fileEntryTypeId:datumu path:datumu classPK:datumu content_sk_SK:datumu description_sk_SK:datumu entryClassPK: datumu title_sk_SK:datumu type:datumu articleId:datumu
那么是哪个子句造成了限制,所以这次搜索只返回期刊文章的最新版本?
【问题讨论】:
-
我试图重现这个错误,但它比我想象的要复杂。如果我有时间我明天会再试一次。尝试将 DEBUG 级别的
com.liferay.portal.kernel.search.SearchEngineUtil添加到服务器管理 -> 日志级别。它将打印由SearchEngineUtil执行的每个 Lucene 查询。