我一直在使用参数来查询节点索引(使用java中的rest api) -
final QueryResult<Map<String,Object>> result = engine.query("start nd=node:name_index(name={src}) return nd.age as age", MapUtil.map("src", "Susan");
但是我无法让这个用于节点/名称的集合。我一直在努力尝试 -
final QueryResult<Map<String,Object>> result = engine.query("start nd=node:name_index(name={src}) return nd.age as age", MapUtil.map("src", Arrays.asList("Susan","Brian", "Ian"));
但它拒绝编译。我想知道我的语法是否有问题,或者参数不适合在此上下文中工作。
答案 0 :(得分:1)
开头的name=
语法用于对属性执行索引查找。它不会进行IN
查找。你可以做这种查找的方式是这样的(注意它取决于Apache的StringUtils):
List<String> names = Arrays.asList("Susan","Brian", "Ian");
String luceneQuery = "name:("+StringUtils.join(names, ",")+")";
engine.query("start nd=node:name_index({luceneQuery}) return nd.age as age", MapUtil.map("luceneQuery", luceneQuery));
请注意,这是“传统”索引的做事方式。在2.0中,他们引入了基于标签的索引,这些索引完全不同。
答案 1 :(得分:0)
非常感谢;虽然当我在第2行的逗号之后添加一个空格时它仍然只会返回一个非空的答案。我使用了 -
String luceneQuery =&#34; name:(&#34; + StringUtils.join(names,&#34;,&#34;)+&#34;)&#34 ;;
它返回了一个人的年龄。当我尝试这个时:
String luceneQuery = "fs:(fs:"+ StringUtils.join(names, " OR fs:")+")";
它给了我三个年龄段。但是,我仍然不确定此查询是否能够利用参数的通常优势,即引擎是否能够在下次重用查询和执行路径时(这次我们可能想要查询4个名称而不是3)