gpt4 book ai didi

lucene - Jackrabbit针对UUID的运行查询

转载 作者:行者123 更新时间:2023-12-03 16:07:13 25 4
gpt4 key购买 nike

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

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

似乎我必须在queryString中转义连字符,但是我尝试添加双反斜杠,但得到的结果相同。对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());
}

最佳答案

问题可能是该节点尚未保存。如search documentation中所述,“一旦保存数据或提交事务,就立即为节点名称和属性值建立索引。”

在这种情况下,我想您可以使用Session.getNodeByIdentifier(String id)代替查询。它也应该更快。

关于lucene - Jackrabbit针对UUID的运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com