从 Solr4 搜索结果打开 Alfresco 文档
Opening Alfresco document from Solr4 Search result
我正在使用 Alfresco 5.1 社区版,Solr4 配置为搜索服务,事务查询配置为混合(Solr 和数据库)
当我在 Solr GUI 中进行搜索时 URL
Solr 查询 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 URL 打开文档 : 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 以便能够从搜索结果中检索到相同的文档 ID?
编辑:
关于我直接使用 Solr 的要求的一些背景知识
Alfresco 将用于内部用户(通常是来自 Intranet 的业务内容管理员)基于某些模板创建文档。我们有一个前端网络应用程序(面向客户),它将有一个搜索部分。当用户使用某些关键字执行搜索操作时(通常是全文搜索),我们将调用 Solr API 来搜索业务管理员创建的文档中的内容,并且相同的结果将显示在 Web 应用程序的前端.当用户单击相应的搜索结果时,将从 Alfresco 检索文档内容并显示在前端 Web 应用程序上。
提前致谢。
将它实现为 Alfresco Web Script 会容易得多。
With Web Scripts, you can either build your own RESTful interface
using light-weight scripting technologies such as JavaScript and
Freemarker.
使用网络脚本您可以访问 search root object:
search - org.alfresco.repo.jscript.Search -
Root object providing access to the various Alfresco search interfaces
such as FTS-Alfresco, Lucene, XPath, and Saved Search results
您的 REST 网络脚本可能可供每个用户使用,但 run as admin:
<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) Solr 编辑的ID return 很可能是Solr 中索引文档的ID。您不能将它与 Alfresco 一起使用。
2) Solr return 似乎是节点的 DBID。 DBID 是文件 systemModel.xml 中定义的方面 sys:referenceable 的 属性 sys:node-dbid,它指的是节点的数据库 ID。
您可以构建一个将此 DBID 作为参数并 returns 文档的 Alfresco repo 网络脚本。
但是作为,您最好直接让Alfresco 执行您的Solr 查询。它将 return 包含您需要的所有元数据的文档列表,包括每个文档的下载 URL。
为您的第二个问题添加部分答案,因为查找此信息很困难并且需要相当长的时间。 (2. 如何获取相关的 Alfresco 文档 ID 以便能够从搜索结果中检索到相同的 ID?)
要查找与该 DBID 关联的文档,您可以使用以下搜索语法:
- 转到管理工具 -> 节点浏览器
- 将查询类型更改为 lucene
- 输入以下搜索词:@sys\:node-dbid:THE_DBID_YOU_WANT_TO_FIND
比如看我们本地的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:...
我正在使用 Alfresco 5.1 社区版,Solr4 配置为搜索服务,事务查询配置为混合(Solr 和数据库)
当我在 Solr GUI 中进行搜索时 URL
Solr 查询 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 URL 打开文档 : 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 以便能够从搜索结果中检索到相同的文档 ID?
编辑:
关于我直接使用 Solr 的要求的一些背景知识
Alfresco 将用于内部用户(通常是来自 Intranet 的业务内容管理员)基于某些模板创建文档。我们有一个前端网络应用程序(面向客户),它将有一个搜索部分。当用户使用某些关键字执行搜索操作时(通常是全文搜索),我们将调用 Solr API 来搜索业务管理员创建的文档中的内容,并且相同的结果将显示在 Web 应用程序的前端.当用户单击相应的搜索结果时,将从 Alfresco 检索文档内容并显示在前端 Web 应用程序上。
提前致谢。
将它实现为 Alfresco Web Script 会容易得多。
With Web Scripts, you can either build your own RESTful interface using light-weight scripting technologies such as JavaScript and Freemarker.
使用网络脚本您可以访问 search root object:
search - org.alfresco.repo.jscript.Search - Root object providing access to the various Alfresco search interfaces such as FTS-Alfresco, Lucene, XPath, and Saved Search results
您的 REST 网络脚本可能可供每个用户使用,但 run as admin:
<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) Solr 编辑的ID return 很可能是Solr 中索引文档的ID。您不能将它与 Alfresco 一起使用。
2) Solr return 似乎是节点的 DBID。 DBID 是文件 systemModel.xml 中定义的方面 sys:referenceable 的 属性 sys:node-dbid,它指的是节点的数据库 ID。 您可以构建一个将此 DBID 作为参数并 returns 文档的 Alfresco repo 网络脚本。
但是作为
为您的第二个问题添加部分答案,因为查找此信息很困难并且需要相当长的时间。 (2. 如何获取相关的 Alfresco 文档 ID 以便能够从搜索结果中检索到相同的 ID?)
要查找与该 DBID 关联的文档,您可以使用以下搜索语法:
- 转到管理工具 -> 节点浏览器
- 将查询类型更改为 lucene
- 输入以下搜索词:@sys\:node-dbid:THE_DBID_YOU_WANT_TO_FIND
比如看我们本地的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:...