【问题标题】:Liferay custom search only last versions of journal articleLiferay 自定义搜索仅期刊文章的最新版本
【发布时间】: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 查询。

标签: lucene liferay liferay-6


【解决方案1】:
searchQuery.addRequiredTerm("head", Boolean.TRUE);

这应该可以解决问题。就我而言,它有帮助

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2015-02-21
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多