Alfresco:如何在 Alfresco Share 中搜索链接(app:filelink 或 cm:link 类型的节点)?

Posted

技术标签:

【中文标题】Alfresco:如何在 Alfresco Share 中搜索链接(app:filelink 或 cm:link 类型的节点)?【英文标题】:Alfresco: how to search for links (nodes of type app:filelink or cm:link) in Alfresco Share? 【发布时间】:2014-01-09 09:43:03 【问题描述】:

我在 Alfresco 4.0.2 上,希望能够搜索节点类型 cm:content 以及 作为 cm:link 或 app:filelink

当我直接查看 Solr 索引时,我发现所有类型都在此处建立了索引。但是,当我在 Alfresco Share 中搜索时,不会返回链接(cm:link 或 app:filelink 类型的节点),即使搜索词在其 cm:name 属性中,与它的 cm:content 等效项相同。我在节点浏览器中检查了这一点。

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 ) 并找到了一个我认为可能相关的位置,对其进行了更改(参见下面的注释行)并重新加载了 Web 脚本,但它仍然没有我想要达到的结果。仍然只显示 cm:content 和 cm:folder 类型。

  // 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 搜索结果中的节点。

【问题讨论】:

【参考方案1】:

我找到了相关的代码部分:

它确实在 search.lib.js 中,但在处理链的更下方以不同的方法getDocumentItem,结果被过滤

  if (node.isContainer || node.isDocument)

我调整了该部分,现在它可以工作了。当然,下面核心 js 库中的这个 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;

【讨论】:

在 Alfresco 5 中的search.lib.js 可以在WEB-INF/lib/alfresco-remote-api-5.0.1.jar 下的/alfresco/templates/webscripts/org/alfresco/slingshot/search/ 中找到

以上是关于Alfresco:如何在 Alfresco Share 中搜索链接(app:filelink 或 cm:link 类型的节点)?的主要内容,如果未能解决你的问题,请参考以下文章

Alfresco 和 drupal 集成

如何通过单点登录将 Alfresco 与 Wordpress 集成?

Alfresco - 如何让管理员无法从 Active Directory 中删除用户

如何向 Liferay 中新创建的用户授予 Alfresco 权限

使用 LDAP 的 Alfresco,在 Alfresco 接口中更改用户的密码

如何在 Alfresco-ADF angular 6 中“自动登录”用户