88 27/04/2018 2018-04-27 13:36:06.000
在此查询中,如果我想表达"包含网络|电话|智能",如何修改查询?这就是逻辑' OR'价值。
编辑:
我对此进行了测试,但它不起作用:
MATCH (s:Product {id:'5001207'})-[r]-> (o) WHERE (o:ProdAttrs) AND any(key in keys(o) WHERE toLower(key) contains 'Network') return o
非RE版本有效。有错误吗?没有语法错误。它只是没有按照预期的那样返回结果。
编辑2:
我的生成查询的功能:
MATCH (s:Product {id:'5001207'})-[r]-> (o)
WHERE (o:Attrs OR o:ExAttrs) AND any(key in keys(o)
WHERE key =~ '(?!).*(network|phone).*')
return o
这是我生成查询的Java方法。那么如何使用Java列表' attrKey'在这个查询?
答案 0 :(得分:1)
只需在WHERE子句中使用OR即可。使用所有小写道具列表可能会有所帮助。
\n
答案 1 :(得分:0)
一种选择是使用正则表达式来测试多个备用字符串值。
MATCH (s:Product {id:'5001207'})-->(o:ProdAttrs)
WHERE ANY(key in KEYS(o) WHERE key =~ '(?i).*(Network|Phone|Smart).*')
RETURN o;
(?i)
使案例不敏感。
此外,如果您传入包含目标字符串集合的parameter(例如,$terms
)(例如['Network', 'Phone', 'Smart']
),则查询可以生成相应的正则表达式。例如:
MATCH (s:Product {id:'5001207'})-->(o:ProdAttrs)
WHERE ANY(key in KEYS(o) WHERE
key =~ '(?i).*(' + REDUCE(s=$terms[0], t IN $terms[1..] | s + '|' + t) + ').*')
RETURN o;