Jackrabbit 针对 UUID 运行查询

2023-12-10

我正在使用 Jackrabbit,并尝试查询具有 UUID 的现有节点。 我的代码如下所示。问题在于,referenceNode 的 UUID 的格式为“'90be246a-a17c-445e-a5ad-81b064de0bee'”,并且 Jackrabbit(Lucene)中使用的 XPATH 引擎似乎在处理连字符时存在问题。

如果我运行 query2,一切都很好并且引用节点被打印。 如果我在 Eclipse 中运行 query1(使用 UUID),则不会返回任何内容。 但是,如果我在 Jackrabbit Viewer 中运行 query1,则查询运行正常。

似乎我必须转义查询字符串中的连字符,但我尝试添加双反斜杠,但得到了相同的结果。针对 UUID 运行查询的正确方法是什么?

  // Set up Nodes
  rootNode = session.getRootNode();

  Node referenceNode = rootNode.addNode("referenceNode");
  Node referencingNode = rootNode.addNode("referencingNode");

  referenceNode.addMixin("mix:referenceable");
  referencingNode.setProperty("pointer", new ReferenceValue(referenceNode));

  // Query
  String uuid = referenceNode.getUUID();
  QueryManager qm = ws.getQueryManager();

  String queryString1 = "//*[@jcr:uuid='"+uuid+"']";
  String queryString2 = "//referenceNode";

  Query q = qm.createQuery(queryString1, Query.XPATH);

  QueryResult result = q.execute();

  NodeIterator it = result.getNodes();

  while(it.hasNext()) {
   Node node = it.nextNode();
   System.out.println( node.getName());
  }

问题可能是节点尚未保存。正如写在搜索文档,“一旦保存数据或提交事务,就会对节点名称和属性值建立索引。”

在这种情况下,我想你可以使用Session.getNodeByIdentifier(String id)而不是使用查询。它也应该快得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackrabbit 针对 UUID 运行查询 的相关文章

随机推荐