全文查询在Jackrabbit-standalone-server上不起作用,但适用于jackrabbit-webapp

时间:2017-05-28 05:54:44

标签: java lucene jcr jackrabbit

我正在使用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。

它让我困了两天,任何人都可以帮助我吗?谢谢!

0 个答案:

没有答案