java - 使用 Liferay 6.1 在自定义 Assets 上实现索引器

标签 java lucene indexing liferay

我想在为我的名为“projet”的项目制作的自定义 Assets 上实现一个索引,我已经开发了这个类:(基于 liferay 的书签索引器)

    /**
     * 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 捆绑在一起)不检索我的自定义 Assets

有什么想法吗?谢谢

最佳答案

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

关于java - 使用 Liferay 6.1 在自定义 Assets 上实现索引器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173877/

相关文章:

java - Netbeans 上的 main gui 和 newjdialog 混淆了

java - 将一定数量的字节读入 ByteBuffer

java - Lucene 中越接近越好

unicode - Elasticsearch :为捷克字符配置icu_tokenizer

Mongodb:如何索引多个嵌套文本字段?

java - 未找到 Selenium 元素 ID

java - 像 "change method signature"这样的通用参数列表的 Eclipse 重构?

lucene - ElasticSearch查询多值属性的问题

ruby - 如何返回多维数组中字符串的坐标/索引? [ ruby ]

MySQL 查询优化 : Correct Index