match union之后如何排序

请尽量不要发截图,而是发文字的查询,这样别人帮你复现查询的时候可以直接复制,还更搜索友好。

MATCH (n:player)
WITH COLLECT(n.player.name) AS playerNames LIMIT 5
MATCH (n:team)
WITH playerNames + COLLECT(n.team.name) AS allNames LIMIT 5
UNWIND allNames AS name
RETURN name ORDER BY name ASC

+-------------------------+
| name                    |
+-------------------------+
| "76ers"                 |
| "Amar'e Stoudemire"     |
| "Aron Baynes"           |
| "Ben Simmons"           |
| "Blake Griffin"         |
| "Boris Diaw"            |
| "Bucks"                 |
| "Bulls"                 |
| "Carmelo Anthony"       |
| "Cavaliers"             |
| "Celtics"               |
...

这种unwind会存在问题,就是第二个如果没数据就整个没数据了

之前好像再别的帖子给过建议,这种表查询适合用 LOOKUP ,后边的图查询可以接管道做哈。

  • 用 MATCH 如果没有 WHERE,第二个查询里写 OPTIONAL
MATCH (n:player)
WITH COLLECT(n.player.name) AS playerNames LIMIT 5
OPTIONAL MATCH (n:team)
WITH playerNames + COLLECT(n.team.name) AS allNames LIMIT 5
UNWIND allNames AS name
RETURN name ORDER BY name ASC

但是lookup 现在如果不用全文索引也很慢,如果用模糊查询,全文索引又要求查询属性不能为null,并且where子句只能有一个

  • 只有第一跳用全文索引,后续的 WHERE 用管道再 WHERE (我之前好像在别的帖子里提到过)
LOOKUP xxxx CONTAINS ... YIELD ... | YIELD ... WHERE <other conditions>
  • 全文索引的不能 null 如果是强制(啊,这个我之前没注意),能不能考虑让 schema 这个属性是 NOT NULL,并且同时给出一个默认值?比如 string 的 "NULL" 绕过限制 ?
NOT NULL DEFAULT "NULL"

这样可以吗,那直接给个空字符串呢

我没试过,但是感觉也是可以

好的,现在我们db工程师改变了,rokckedb的缓存配置变大,就快了

1 个赞