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捆綁在一起)不檢索我的自定義資產
有什麼想法?謝謝
您應該添加解決方案作爲您自己的問題的答案! – 2012-02-08 22:13:47
什麼是Projet.class.getName()在你的上下文中?如果我想從我的自定義portlet索引雜誌artical如何? – 2014-01-30 11:10:46