我正在使用Alfresco 4.0.2并且希望能够搜索类型 cm:内容的节点以及作为cm:link或app:filelink 。
当我直接查看Solr索引时,我发现所有类型都在那里编入索引。但是当我在Alfresco Share中搜索时,即使搜索项位于cm:name属性中,也不会返回链接(cm:node或app:filelink类型的节点),与cm的cm:内容相同。我在节点浏览器中检查了这个。
cm:content和cm:link都有cm:cmobject,因为它是父级,cm:name属性设置为索引,在Solr中有效。
因此,在Solr和返回给客户端的响应之间,Alfresco正在做一些过滤并排除链接,我假设。我试图找到相关的代码,但还没有成功。
我查看了 search.lib.js (/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js )并找到了一个我认为可能相关的地方,更改了它(请参见下面的注释后的行)并重新加载了网页脚本,但它仍然没有我希望实现的结果。仍然只显示cm:content和cm:文件夹类型。
// ensure a TYPE is specified - if no add one to remove system objects from result sets
if (ftsQuery.indexOf("TYPE:\"") === -1 && ftsQuery.indexOf("TYPE:'") === -1)
{
//ftsQuery += ' AND (+TYPE:"cm:content" +TYPE:"cm:folder")';
ftsQuery += ' AND (+TYPE:"cm:content" +TYPE:"cm:folder" +TYPE:"cm:link" +TYPE:"app:filelink")';
}
Alfresco在哪里过滤掉某些搜索结果,例如特定类型?
更新
当我通过Javascript控制台按名称搜索时,所有类型都包含在搜索结果中(在我的例子中,有三个结果)。这是我希望通过常规的Share网站搜索实现的结果。 突出显示的结果是未出现在常规Alfresco Share搜索结果中的节点。
答案 0 :(得分:3)
我找到了相关的代码部分:
确实在 search.lib.js 中,但是在处理链中的另一个方法getDocumentItem
中,结果按照
if (node.isContainer || node.isDocument)
我调整了部分,现在它可以工作了。当然,下面的核心js lib中的这个hack仅用于测试,该函数应该以某种方式覆盖核心之外。
/**
* Returns an item of the document library component.
*/
function getDocumentItem(siteId, containerId, pathParts, node)
{
// PENDING: how to handle comments? the document should
// be returned instead
// check whether we already processed this document
if (checkProcessedCache("" + node.nodeRef.toString()))
{
return null;
}
// check whether this is a valid folder or a file
var item = t = null;
if (node.qnamePath.indexOf(COMMENT_QNAMEPATH) == -1 &&
!(node.qnamePath.match(DISCUSSION_QNAMEPATH+"$") == DISCUSSION_QNAMEPATH))
{
if (true || node.isContainer || node.isDocument)
{
item =
{
site: getSiteData(siteId),
container: containerId,
nodeRef: node.nodeRef.toString(),
tags: ((t = node.tags) !== null) ? t : [],
name: node.name,
displayName: node.name,
title: node.properties["cm:title"],
description: node.properties["cm:description"],
modifiedOn: node.properties["cm:modified"],
modifiedByUser: node.properties["cm:modifier"],
createdOn: node.properties["cm:created"],
createdByUser: node.properties["cm:creator"],
path: pathParts.join("/")
};
item.modifiedBy = getPersonDisplayName(item.modifiedByUser);
item.createdBy = getPersonDisplayName(item.createdByUser);
}
if (node.isContainer)
{
item.type = "folder";
item.size = -1;
}
else if (node.isDocument)
{
item.type = "document";
item.size = node.size;
} else {
// added MLN
item.type = "document";
item.size = 1;
}
}
return item;
}