使用Liferay 6.1在自定义资产上实现Indexer [英] Implement Indexer on an custom asset with Liferay 6.1

查看:106
本文介绍了使用Liferay 6.1在自定义资产上实现Indexer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为我的项目projet制作自定义资产的索引,我已经开发了这个类:(基于liferay的书签索引器)

i'd like to implement a index on a custom asset made for my project called "projet", i've already developped this class : (based on the liferay's bookmark indexer )

    /**
     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
     *
     * This library is free software; you can redistribute it and/or modify it under
     * the terms of the GNU Lesser General Public License as published by the Free
     * Software Foundation; either version 2.1 of the License, or (at your option)
     * any later version.
     *
     * This library is distributed in the hope that it will be useful, but WITHOUT
     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
     * details.
     */



    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import java.util.Locale;

    import javax.portlet.PortletURL;

    import org.apache.log4j.Logger;

    import com.liferay.portal.kernel.search.BaseIndexer;
    import com.liferay.portal.kernel.search.BooleanQuery;
    import com.liferay.portal.kernel.search.Document;
    import com.liferay.portal.kernel.search.Field;
    import com.liferay.portal.kernel.search.Indexer;
    import com.liferay.portal.kernel.search.SearchContext;
    import com.liferay.portal.kernel.search.SearchEngineUtil;
    import com.liferay.portal.kernel.search.Summary;
    import com.liferay.portal.kernel.util.GetterUtil;
    import com.liferay.portal.model.Group;
    import com.liferay.portal.service.ClassNameLocalServiceUtil;
    import com.liferay.portal.service.GroupLocalServiceUtil;
    import com.liferay.portal.util.PortletKeys;




    public class ProjetIndexer extends BaseIndexer {
    private static Logger LOGGER = Logger.getLogger(ProjetIndexer.class);

    public static final String[] CLASS_NAMES = { Projet.class.getName() };

    public String[] getClassNames() {
        return CLASS_NAMES;
    }


    public String getPortletId() {
        return Long.toString(ClassNameLocalServiceUtil.getClassNameId(Projet.class)) ;
    }

    @Override
    protected void doDelete(Object obj) throws Exception {
        LOGGER.info("doDelete");

        Projet entry = (Projet) obj;

        deleteDocument(entry.getCompanyId(), entry.getPrimaryKey());

    }

    @Override
    protected Document doGetDocument(Object obj) throws Exception {
        LOGGER.info("doGetDocument");

        Projet entry = (Projet) obj;

        Document document = getBaseModelDocument(getPortletId(), entry);

        document.addText(Field.DESCRIPTION, "test123");
        document.addText(Field.TITLE,  "test123");
        document.addKeyword(Field.TYPE, entry.getType());
        document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());


        //what else ??




        return document;
    }

    @Override
    protected Summary doGetSummary(Document document, Locale locale,
            String snippet, PortletURL portletURL) throws Exception {


LOGGER.info("doGetSummary");


        String title = document.get(Field.TITLE);

        String url = document.get(Field.URL);

        String entryId = document.get(Field.ENTRY_CLASS_PK);

        // portletURL.setParameter("struts_action",
        // "/bookmarks/view_entry");TODO
        portletURL.setParameter("entryId", entryId);

        return new Summary(title, url, portletURL);

    }

    @Override
    protected void doReindex(Object obj) throws Exception {
        LOGGER.info("doReindex");

        Projet entry = (Projet) obj;

        Document document = getDocument(entry);

        SearchEngineUtil.updateDocument(entry.getCompanyId(), document);

    }

    @Override
    protected void doReindex(String className, long classPK) throws Exception {
        LOGGER.info("doReindex");

        Projet entry = ProjetLocalServiceUtil.getProjet(classPK);

        doReindex(entry);

    }

    @Override
    protected void doReindex(String[] ids) throws Exception {
        long companyId = GetterUtil.getLong(ids[0]);

        LOGGER.info("doReindex");

        // reindexFolders(companyId);
        reindexRoot(companyId);

    }

    @Override
    protected String getPortletId(SearchContext searchContext) {
        return getPortletId();
    }


    protected void reindexRoot(long companyId) throws Exception {

        LOGGER.info("reindexRoot");

        int groupCount = GroupLocalServiceUtil.getCompanyGroupsCount(companyId);

        int groupPages = groupCount / Indexer.DEFAULT_INTERVAL;

        for (int i = 0; i <= groupPages; i++) {
            int groupStart = (i * Indexer.DEFAULT_INTERVAL);
            int groupEnd = groupStart + Indexer.DEFAULT_INTERVAL;

            reindexRoot(companyId, groupStart, groupEnd);
        }
    }

    protected void reindexRoot(long companyId, int groupStart, int groupEnd)
            throws Exception {

        LOGGER.info("reindexRoot");

        List<Group> groups = GroupLocalServiceUtil.getCompanyGroups(companyId,
                groupStart, groupEnd);

        for (Group group : groups) {
            long groupId = group.getGroupId();
            // long folderId =
            // BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID;

            int entryCount = ProjetLocalServiceUtil.getEntriesCount(groupId);

            int entryPages = entryCount / Indexer.DEFAULT_INTERVAL;

            for (int i = 0; i <= entryPages; i++) {
                int entryStart = (i * Indexer.DEFAULT_INTERVAL);
                int entryEnd = entryStart + Indexer.DEFAULT_INTERVAL;

                reindexEntries(companyId, groupId, entryStart, entryEnd);
            }
        }
    }


    protected void reindexEntries(long companyId, long groupId, int entryStart,
            int entryEnd) throws Exception {

        LOGGER.info("reindexEntries");

        List<Projet> entries = ProjetLocalServiceUtil.getEntries(groupId,
                entryStart, entryEnd);

        if (entries.isEmpty()) {
            return;
        }

        Collection<Document> documents = new ArrayList<Document>();

        for (Projet entry : entries) {
            Document document = getDocument(entry);

            documents.add(document);
        }

        SearchEngineUtil.updateDocuments(companyId, documents);
    }
}

这是我的 liferay portlet.xml

<indexer-class>path package .ProjetIndexer</indexer-class>   

但它不起作用。搜索portlet(与liferay 6.0捆绑在一起)不会检索我的自定义资产

but it doesnt work. search portlet (bundled with liferay 6.0) does not retrieve my custom asset

任何想法?谢谢

推荐答案

我的问题是通过删除/ data / lucent /下的数据来解决的。也许我的测试deleloppment已损坏我已经改变了方法也是doGetDocument,确保地图中没有设置空字段。非常感谢您的合作

My issue is solved by deleting data under /data/lucent/ Maybe my tests deleloppment was corrupted I've changed the method doGetDocument too, making sure that no empty field is set in the map. many thanks for your cooperation

这篇关于使用Liferay 6.1在自定义资产上实现Indexer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆