在Liferay 6.1中搜索动态数据列表记录的最佳方法

时间:2014-02-27 16:32:43

标签: indexing liferay liferay-6 wcm

在Liferay 6.2中,可以在动态数据列表定义的字段上设置Indexable选项,从而使它们可以搜索(as explained in the Documentation for Liferay 6.2

我想在搜索中包含DDL记录,并且必须使用Liferay 6.1。我想知道,最好的办法是什么。

目前我已查看过customizing the search,但动态数据列表并未作为选项提及。

我也看了Creating an Indexer Post-Processor hook,但如果我理解正确,它只能改变现有的索引过程。

create Indexers for custom assets似乎有可能,但我想知道这是否是最好的方法,因为这个过程可能非常耗时,而且我不知道是否同样适用于自定义资产的过程也是如此适用于动态数据列表。

有没有更简单的方法在Liferay 6.1中实现可搜索的动态数据列表(如6.2),我只是没有看到?

2 个答案:

答案 0 :(得分:1)

我在liferay-portlet.xml中的任何动态数据portlet定义中都找不到<indexer-class>声明。因此,您需要创建一个EXT插件,其中包含1)用于DDL记录的Indexer类,以及2)使用<indexer-class>更新了portray 169的liferay-portlet.xml。成功实现此目标后,您将拥有按照this page中的说明更新搜索portlet的显示设置,并在下面的列表中添加com.liferay.portlet.dynamicdatamapping.model.DDMContent

{"facets": [
{
    "className": "com.liferay.portal.kernel.search.facet.AssetEntriesFacet",
    "data": {
        "frequencyThreshold": 1,
        "values": [
            "com.liferay.portlet.bookmarks.model.BookmarksEntry",
            "com.liferay.portlet.blogs.model.BlogsEntry",
            "com.liferay.portlet.calendar.model.CalEvent",
            "com.liferay.portlet.documentlibrary.model.DLFileEntry",
            "com.liferay.portlet.journal.model.JournalArticle",
            "com.liferay.portlet.messageboards.model.MBMessage",
            "com.liferay.portlet.wiki.model.WikiPage",
            "com.liferay.portal.model.User",
        "com.liferay.portlet.dynamicdatamapping.model.DDMContent"
        ]
    },
...
...

这是高级方法。你需要从这里连接点。希望这有帮助!

(如果你想知道为什么不使用hook呢?原因:因为钩子不支持覆盖liferay-portlet.xml,如上所述here

答案 1 :(得分:0)

您可以挂钩main_search.jspf并将DDLRecord类添加到searchContext.getEntryClassNames()数组中。这样,搜索portlet也将开始搜索DDLRecords。您很可能需要创建自定义DDLRecordIndexPostProcessor,因为为DDLRecord提供的摘要并不是很好(覆盖postProcessSummary方法)。