Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene Jackrabbit对UUID运行查询_Lucene_Xpath_Jackrabbit_Jcr_Jsr170 - Fatal编程技术网

Lucene Jackrabbit对UUID运行查询

Lucene Jackrabbit对UUID运行查询,lucene,xpath,jackrabbit,jcr,jsr170,Lucene,Xpath,Jackrabbit,Jcr,Jsr170,我正在使用Jackrabbit,并尝试查询具有UUID的现有节点。 我的代码如下所示。问题在于referenceNode的UUID的格式为“90be246a-a17c-445e-a5ad-81b064de0bee”,而且在Jackrabbit(Lucene)中使用的XPATH引擎似乎在处理连字符方面存在问题 如果我运行query2,一切都很好,并且会打印referenceNode。 如果在Eclipse中运行query1(使用UUID),则不会返回任何内容。 但是,如果我在Jackrabbit查

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

如果我运行query2,一切都很好,并且会打印referenceNode。 如果在Eclipse中运行query1(使用UUID),则不会返回任何内容。 但是,如果我在Jackrabbit查看器中运行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(字符串id)
而不是使用查询。也应该快得多。

谢谢。在安装之后和查询之前,我添加了一个简单的session.save(),它成功了。