从Solr4搜索结果打开Alfresco文档

时间:2016-10-14 08:19:54

标签: alfresco solr4

我正在使用Alfresco 5.1社区版,Solr4配置为搜索服务和事务查询配置为混合(Solr& DB)

当我从Solr GUI中搜索以下网址时

Solr Query GUI: https://localhost:8443/solr4/#/alfresco/query

我通过以下格式获取搜索结果,其中包含一些ID&其他信息。

Solr搜索结果(结果JSON因可读性而被截断)

{
  "responseHeader": {
    "status": 0,
    "QTime": 25,
    "params": {
      "q": "testing",
      "defType": "dismax",
      "qt": "",
      "indent": "true",
      "wt": "json",
      "_": "1476349027637"
    }
  },
  ...
    "docs": [
      {
        "id": "_DEFAULT_!8000000000000040!80000000000008e3",
        "_version_": 0,
        "DBID": 2275
      },
      {
        "id": "_DEFAULT_!8000000000000072!8000000000000902",
        "_version_": 0,
        "DBID": 2306
      },
      {
        "id": "_DEFAULT_!8000000000000040!80000000000008ea",
        "_version_": 0,
        "DBID": 2282
      },
      {
        "id": "_DEFAULT_!800000000000000b!80000000000008ef",
        "_version_": 0,
        "DBID": 2287
      },
      {
        "id": "_DEFAULT_!8000000000000071!80000000000008f0",
        "_version_": 0,
        "DBID": 2288
      },
      {
        "id": "_DEFAULT_!8000000000000025!80000000000008eb",
        "_version_": 0,
        "DBID": 2283
      }
    ]
  },
  "processedDenies": false
}

我正在尝试构建一个UI,在这些搜索结果显示的位置,用户可以单击以检索Alfresco中的相应文档。下面是我用来从Alfresco检索内容的Alfresco API。

用于打开文档的Alfresco API网址: http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom/content?id=

示例Alfresco文档ID如下所示。我没有在Solr4搜索结果中返回此类ID。

示例文档ID:

7edf97f4-43cf-4fe5-8099-85608776d159

问题:

1)Solr4返回的​​ID是什么? 2)如何从相关的Alfresco文档ID中搜索相同的搜索结果?

修改

关于我直接使用Solr的要求的一些背景

Alfresco将用于通过内部用户(通常来自Intranet的业务内容管理员)基于某些模板创建文档。我们有一个前端Web应用程序(面向客户),它将有一个搜索部分。当用户使用某些关键字(通常是全文搜索)执行搜索操作时,我们将调用Solr API来搜索由业务管理员创建的文档中的内容,并且相同的结果将显示在Web应用程序的前端。当用户点击相应的搜索结果时,文档内容将从Alfresco&显示在前端webapp上。

提前致谢。

3 个答案:

答案 0 :(得分:3)

将其实现为Alfresco Web Script要容易得多。

  

使用Web Scripts,您可以构建自己的RESTful接口   使用轻量级脚本技术,如JavaScript和   的freemarker。

使用网络脚本,您可以访问search root object

  

搜索 - org.alfresco.repo.jscript.Search -   Root对象提供对各种Alfresco搜索界面的访问   例如FTS-Alfresco,Lucene,XPath和保存的搜索结果

除了run as admin之外,每个用户都可以使用您的REST网页脚本:

    <webscript>
      <shortname>My Rest Query</shortname>
      <url>/api/my/query</url>
      <format default="json">argument</format>
      <authentication runas="admin">guest</authentication>
      <transaction allow="readonly">required</transaction>
    </webscript>

有很多tutorials ...

答案 1 :(得分:2)

1)Solr返回的ID可能是Solr中索引文档的ID。你不能在Alfresco上使用它。

2)似乎Solr返回节点的DBID。 DBID是文件systemModel.xml中定义的方面sys:referenceable的属性sys:node-dbid,它指的是节点的数据库ID。 您可以构建一个Alfresco repo webscript,它将此DBID作为参数并返回文档。

但是作为imagine said,您最好直接要求Alfresco执行您的Solr查询。它将返回包含您需要的所有元数据的文档列表,包括每个文档的下载URL。

答案 2 :(得分:0)

为您的第二个问题添加部分答案,因为查找此信息很难并花了很长时间。 (2.如何从相关的Alfresco文档ID中获取相同的搜索结果?)

要查找与该DBID关联的文档,您可以使用以下搜索语法:

  1. 转到管理工具 - &gt;节点浏览器
  2. 将查询类型更改为lucene
  3. 输入以下搜索词:@sys \:node-dbid:THE_DBID_YOU_WANT_TO_FIND
  4. 例如,查看我们的本地solr4错误报告:

    {
      "responseHeader":{
        "status":0,
        "QTime":0,
        "params":{
          "q":"ERROR*"}},
      "response":{"numFound":2,"start":0,"docs":[
          {
            "id":"_DEFAULT_!800000000000008c!8000000000002289",
            "_version_":0,
            "DBID":4499},
    ...
    

    要查找该文档,请搜索:@sys \:node-dbid:4499

    您可以在数字DBID周围添加引号 - 它可以使用和不使用它们。

    '@'和第一个反斜杠'\'(转义第一个冒号)是必需的 - 如果这些被删除并且catalina.out中将记录错误,则查询会中断。

    第二个冒号不得包含反斜杠转义 - 它不是错误(日志中没有任何内容),但不会找到任何结果。

    如有必要,将搜索范围从workspace:// SpacesStore更改为archive:// SpacesStore以查找已删除的文档。

    您可以加入DBID,如下所示,一次性找到它们(至少在相同的空间商店中):

    @sys\:node-dbid:1234 OR @sys\:node-dbid:2345 OR @sys\:node-dbid:...