2012-02-07 61 views
3

我想實現一個爲我的項目製作的自定義資產(稱爲「projet」)的索引,我已經開發了這個類:(基於liferay的書籤索引器)使用Liferay 6.1實現自定義資產的索引器

/** 
    * 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捆綁在一起)不檢索我的自定義資產

有什麼想法?謝謝

+0

您應該添加解決方案作爲您自己的問題的答案! – 2012-02-08 22:13:47

+0

什麼是Projet.class.getName()在你的上下文中?如果我想從我的自定義portlet索引雜誌artical如何? – 2014-01-30 11:10:46

回答

0

我的問題是通過刪除/ data/lucent /下的數據解決的。也許我的測試deleloppment已損壞我也更改了doGetDocument方法,確保在地圖中沒有設置空字段。非常感謝您的合作