我有推文数据库。
如果我按如下方式返回推文
MATCH (t:Tweet) WHERE ID(t) = 337314 RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text
我明白了:
657066610235154432 337314 THE WEEK THAT WAS Happenings in #climatechange #politics, #policy & #science for @climaterealitya #reality Website: https://t.co/abnpfO4blb
如果我然后使用属性t.id来匹配推文,则失败:
MATCH (t:Tweet) WHERE t.id = 657066610235154432 RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text, t.alpha_updated
退货 - 无行
如果我使用TOSTRING()将t.id转换为字符串,则返回节点:
MATCH (t:Tweet) WHERE TOSTRING(t.id) = '657066610235154432' RETURN TOSTRING(t.id), ID(t) AS id, t.text AS text
以下是neo4j中的截图:http://www.screencast.com/t/EtMSlKdZPv
这种情况发生在数百万的数据库中大约6k的推文上。它们几乎是连续的ID值块,因此我怀疑在添加这些节点的某个时间段内有一个损坏的索引。
理解和解决这个问题的任何帮助都将不胜感激。
答案 0 :(得分:0)
您的数据库有时会存储id
属性的字符串值。
Here is a console包含2个具有id
属性的节点。一个节点使用字符串值,另一个节点使用整数。控制台显示TOSTRING()
查询与两个节点匹配。
但是,如果您使用此查询,您将成功获取(仅)存储整数值的节点:
MATCH (t:Tweet)
WHERE t.id = 657066610235154432
RETURN t.id, ID(t) AS id, t.text AS text;
因此,您需要浏览数据库并重新设置具有相应整数值的字符串值的所有属性。