gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:07:43 25 4
gpt4 key购买 nike

我想在为我的名为“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com