我正在使用Apace JackRabbit作为我项目中的文档存储库。我发现当我使用jackrabbit-webapp作为远程存储库时,您可以全文查询文档的内容。但是当使用jackrabbit-standalone-server时,查询结果总是为空。
除了存储库的url之外,代码完全相同,如下所示:
// put a file into repository
Repository repository = new URLRemoteRepository(url);
Session session = repository.login(...);
......
Node fileNode = rootNode.addNode(name, JcrConstants.NT_FILE);
Node resNode = fileNode.addNode(JcrConstants.JCR_CONTENT, JcrConstants.NT_RESOURCE);
String mimeType = MimeUtil.getMimeType(filename);
resNode.setProperty("jcr:mimeType", mimeType);
BinaryValue fileBinary = new BinaryValue(inputStream);
resNode.setProperty(JcrConstants.JCR_DATA, fileBinary);
session.save();
// query
String xPath = "//element(*, nt:file)[(jcr:contains(jcr:content,\"" + keyword + "\"))]";
Workspace ws = session.getWorkspace();
QueryManager qm = ws.getQueryManager();
Query query = qm.createQuery(xPath, Query.XPATH);
QueryResult result = query.execute();
NodeIterator it = result.getNodes();
while (it.hasNext()) {
Node node = it.nextNode();
list.add(node);
}
存储库是由jackrabbit自动创建的,我没有做任何配置。 tomcat上的webapp的url是http://localhost:8080/jackrabbit-webapp-2.8.0/rmi。 独立服务器的网址为http://localhost:8082/rmi。
我尝试了一切来找出webapp模式和独立服务器模式之间的区别,甚至在调试级别上比较了它们的日志文件,但没有弄明白。独立服务器也是一个带嵌入式码头的网络应用,为什么它在查询上有所不同?
我还尝试使用luke(lucene索引资源管理器)来检查生成的索引文件。节点的属性(例如jcr:createdBy)在两者上都被索引,并且可以成功查询。但是文档的内容(全文)仅在webapp上编制索引。删除索引文件夹然后重启服务器重建索引不会改变任何东西。显然,在独立服务器上,lucene根本不会为文件的内容编制索引。
我希望我的项目可以将jackrabbit捆绑在一个JVM中,也就是说,我想最终使用嵌入式部署模式。它失败了上面的问题,然后我尝试了独立服务器,仍然无法正常工作。版本为2.8.0和2.14.0。
它让我困了两天,任何人都可以帮助我吗?谢谢!