neo4j学习笔记——过滤查询

MATCH用于特定具有属性值的查询,而大多数情况下,我们需要查询具备一定条件的数据,这时可用WHERE子句来过滤MATCH的查询结果。

特别地,MATCH 后的语句可以省略:

  • relationship,例如:

        (node1_name: node1_label_name)-->(node2_name:node2_label_name) ;

  • node_name,例如:

        (node1_name: node1_label_name)-[: relationship]->( )。

>>>下文举例中标签为person的所有节点如下表所示,以下基于该数据进行过滤查询举例。

情况一:简单条件查询

关键字:WHERE如除某条件外用 WHERE NOT,句法如下:

MATCH Statement
WHERE Condition

//negative condition
MATCH Statement
WHERE NOT Condition

        举例1:(正)查询标签为person,name为Jennifer的节点的两种方式。

-等价- 

        举例2:(反) 查询标签为person,name不是Jennifer的节点。

情况二:多条件查询

2.1 查询同时满足两个及以上条件的属性

        用 WHERE 且在多个条件之间用布尔操作符 AND 连接,句法如下:

MATCH Statement
WHERE condition1 AND condition2

        举例:查找name为Jennifer且birthdate为1990/12/12的节点。

2.2 查询满足至少一个条件的属性

        用 WHERE 并在多个条件之间用布尔操作符 OR 连接,句法如下:

MATCH Statement
WHERE condition1 OR condition2

举例:查找name为Jennifer或Tom的节点。

  • 注意:WHERE p.name = ("Jennifer" OR "Tom") 是错误的❌。 

2.3 查询满足且仅满足一个条件的属性

         用 WHERE 并在条件之间用布尔操作符 XOR 连接,句法如下:

MATCH Statement
WHERE condition1 XOR condition2

        举例:查询节点name为lily异或age是60的节点。

         上述查询条件等价于:

                (1)name = "lily" and age ≠ 60:节点lily。

                (2)name ≠ "lily" and age = 60:节点TomHanks。

 情况三:值域(数值范围)查询

3.1 属性值在某个范围内的查询        

        句法如下:

MATCH Statement
WHERE (number1 <=/<) XXX.property_value (<=/< number2)

        举例:查找age在[20,60]之间的节点。

3.2 属性值属于某个数组的查询

        关键字 IN,句法如下:

MATCH Statement
WHERE XXX.property_value IN [ARRAY]
 

        举例1:查询age值在数组[20,30,50,60]中的节点。

         举例2:查询name为Jennifer和Tom的节点。

 

 

情况四:存在性查询

  4.1 查询某属性是否存在

  •   方法一:WHERE exists() (neo4j未来版本会删除该关键字)
  •   方法二:WHERE proprety is not null。

        句法如下

MATCH Statement
WHERE exists(XXX.property_name)

//2
MATCH Statement
WHERE XXX.property_name is not null

         举例:查询name为lily且属性age存在的数据。

-等价-

 4.2 查询关系/模式是否存在

句法如下:

MATCH Statement1
WHERE exists(Statement2)
  • WHERE 之后的语句中不可以出现新变量! 

举例1:

情况五:字符串模糊查询

5.1 查询以特定字符串为首的属性值

        用 WHERE ... STARTS WITH 查询,句法如下,其中XX是字符串:

MATCH Statement
WHERE XXX.property_name STARTS WITH 'XX'

 举例:查询标签为person的所有节点name以”li"开头的节点。

         ★注意:是STARTS WITH 有尾巴“S”。

 5.2 查询以特定字符串结尾的属性

         用 WHERE ... ENDS WITH 查询,句法如下:

MATCH Statement
WHERE XXX.property_name ENDS WITH 'XX'

        举例:查询name以"er"结尾的节点。

 5.3 查询包含特定字符串的属性

        用 WHERE ... CONTAINS 查询,句法如下:

MATCH Statement
WHERE XXX.property_name CONTAINS 'XX'

        举例:查询name中包含'n'的节点。

 5.4 使用regular expression进行模糊查询

        可以用正则表达式对所有属性值为字符串的属性进行查询,句法如下,这里注意是“=~”(中间无空格)

MATCH Statement
WHERE XXX.property_name = ~'regular expression'

        举例1:查询name以“J”开头的节点。

         举例2:查询name以两个单词(中间空格)形式存在的节点。

 

情况六:复杂查询

6.1 查询一个模式后的筛选

        在match的模式中筛选出符合条件的模式,使用关键字 OPTIONAL MATCH,句法如下:

MATCH Statement1
OPTIONAL MATCH Statement2
RETURN XXX
  • 符合statement1和statement2的模式,返回相关值;
  • 符合statement1但不符合statement2的模式,也将被查询出来,但返回值为null;
  • 如果需要同时满足两个条件,则用本文 5.2 的WHERE statement1 AND statement2

        举例:查询名字为Tom的所有person,如果Tom还是名字为Jennifer的person的朋友更好。

 6.2 同时满足多个模式的查询

        若要查询满足多个模式的节点、属性等,可用如下句法:

//同时满足多个关系不连续模式的查询
MATCH Pattern1, Pattern2, ......

//满足多个关系连续模式的查询
MATCH (node_name1:node_label_name1)-[:relationship1]-(node_name2:node_label_name2)- 
      [:relationship2]-(node_name3:node_label_name3)
  •  若模式之间关系不连续,用逗号隔开;
  •  若模式之间关系连续,仅需简单叠加。

        举例:查找Tom,他既是Jennifer的朋友又是lily的朋友。

       (1)方法一:用连续模式

         (2)方法二:用不连续模式(“,”)

 (3)方法三:用MATCH... WHERE... AND...(注意WHERE后不可以出现新变量名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个Python期末大作业是一个基于协同过滤算法的电影推荐系统,采用了neo4j数据库来存储和查询电影数据。协同过滤算法是一种利用用户的历史行为和兴趣来进行推荐的方法,它可以根据用户的喜好和其他用户的相似度来推荐用户可能感兴趣的电影。 这个电影推荐系统的实现包括以下几个步骤:首先,通过爬虫从网上获取电影的相关信息,比如电影的名字、导演、演员、类型等等,并将这些信息存储到neo4j数据库中。然后,根据用户的历史行为和评分数据,计算用户之间的相似度,并将相似度的结果也存储到数据库中。接下来,当用户登录系统并选择了一个电影,系统会根据用户喜欢的电影类型和其他用户的相似度,从数据库中查找可能感兴趣的电影,并进行推荐。 通过采用neo4j数据库,这个电影推荐系统可以更高效地存储和查询大数据量的电影信息和用户数据。neo4j是一个图数据库,它的存储结构和图的结构相似,可以更好地支持复杂的关系型数据的存储和查询。同时,neo4j也提供了丰富的查询语言和API,方便我们实现各种复杂的查询和推荐算法。 总而言之,这个基于协同过滤算法的电影推荐系统使用了neo4j数据库来存储和查询电影数据,通过分析用户的历史行为和其他用户的相似度来进行推荐,可以更好地满足用户的个性化需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值