如何在Cypher中查询多个属性值

时间:2016-08-01 15:14:46

标签: neo4j cypher

我有一个产品名单[衬衫,鞋子,裤子,帽子,眼镜] 我正在尝试执行一个查询,该查询将使用不区分大小写的正则表达式返回产品,只要该值存在,就会以任何顺序返回。

我只能按顺序查询它们 MATCH(产品:产品)WHERE product.name =〜“(?i)。*衬衫。鞋。”RETURN产品

我如何不按顺序查询它们,即 MATCH(产品:产品)WHERE product.name =〜“(?i)。* hat。衬衫。”?

由于

1 个答案:

答案 0 :(得分:0)

您想要使用正则表达式搜索到底是什么?您是否正在寻找仅包含列表中某个关键字的产品名称?还是多个关键字?

如果您只想查找列表中至少包含一个关键字的产品名称,可以使用字符串比较运算符CONTAINStoLower()函数来使比较大小写不敏感:

WITH {products} AS products
MATCH (p:Product) WHERE any(x IN products WHERE toLower(p.name) CONTAINS toLower(x))
RETURN p

{products}是您的产品名称数组:['shirt', 'shoes', 'pants', 'hats', 'glasses']

修改

要查找包含所有关键字的产品节点,请使用all()列表谓词。

例如,假设您要查找名称中包含"衬衫"的所有产品节点。和"鞋":

WITH ["shirt", "shoes"] AS keywords
MATCH (p:Product) WHERE all(x IN keywords WHERE toLower(p.name) CONTAINS toLower(x))
RETURN p