我有一个产品名单[衬衫,鞋子,裤子,帽子,眼镜] 我正在尝试执行一个查询,该查询将使用不区分大小写的正则表达式返回产品,只要该值存在,就会以任何顺序返回。
我只能按顺序查询它们 MATCH(产品:产品)WHERE product.name =〜“(?i)。*衬衫。鞋。”RETURN产品
我如何不按顺序查询它们,即 MATCH(产品:产品)WHERE product.name =〜“(?i)。* hat。衬衫。”?
由于
答案 0 :(得分:0)
您想要使用正则表达式搜索到底是什么?您是否正在寻找仅包含列表中某个关键字的产品名称?还是多个关键字?
如果您只想查找列表中至少包含一个关键字的产品名称,可以使用字符串比较运算符CONTAINS
和toLower()
函数来使比较大小写不敏感:
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