2012-02-07 4 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> 

하지만 작품을 나던. 검색 포틀릿 (liferay 6.0과 함께 제공됨)이 내 맞춤 자산을 검색하지 않습니다.

아이디어가 있습니까? 감사합니다

+0

귀하는 자신의 질문에 대한 해결책으로 해결책을 추가해야합니다! –

+0

컨텍스트에서 Projet.class.getName()이란 무엇입니까? 내 커스텀 포틀릿에서 artical 한 저널을 인덱싱하려면 어떻게해야합니까? –

답변

0

내 문제는/data/lucent/아래에있는 데이터를 삭제하여 해결할 수 있습니다. 내 테스트 deleloppment가 손상되었을 수 있습니다. doGetDocument 메소드도 변경 했으므로 맵에 빈 필드가 설정되지 않았는지 확인하십시오. 귀하의 협력에 많은 협조 부탁드립니다.

관련 문제