Cypher错误:“不知道如何比较”。可能的错误?

时间:2016-07-13 02:38:37

标签: neo4j cypher graph-databases graphaware

所以我正在从事涉及日语的个人项目。在这个项目中,我还使用了Neo4J数据库。

我偶然发现了一个非常奇怪的问题,我希望你的专业知识。

基本上,我从我的数据库中检索一些日文字符(称为平假名)。这没什么特别的。我根据一个音节是由一个字符(例如'に','ni')或两个(例如'にょ','nyo',这是一个事实)将几个子类别中的平假名字符分开。由ni(に)和yo(よ)制成。

所以我的类别中有以下结构(这里有点简化):

Hiragana ------- Single character hiragana (like に)
            |--- Double character hiragana (like にょ)

这些类别中的每一个都链接到包含平假名值的节点(此处称为项目)(如に或にょ)。要检索这些字符,我会发出一个听起来像“给我所有属于列表子列表的所有字符”的查询“平假名”。实际代码没什么特别的,就像这样:

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(kana:item)-[:romaji]->(romaji:item)
where list.name =~'(?i)Hiragana'
return kana.value as item, romaji.value as answer  ORDER BY kana asc

由此,我收到以下错误:

Don't know how to compare that. Left: Node[496]{value:"にゅ"} (NodeProxy);
Right: Node[498]{value:"にょ"} (NodeProxy)

从一开始,我很困惑,数据库引擎不知道如何比较它们,因为它们似乎具有相同的类型(NodeProxy)。此外,我不认为我的查询试图将节点的值与其他节点进行比较。

无论如何,我开始修改查询,因为我以前使用它并且它有效。经过一段时间的搜索后,我注意到,在我的返回条款中,如果我将假名。值改为项目,让我们说 kana.value为假名,它会突然再次起作用

我更改了这个值,得到了以下结果:

  • kana.value as item:KO
  • kana.value为假名:好的
  • kana.value as test:KO
  • kana.value as es:KO
  • kana.value作为问题:KO
  • kana.value as romaji:KO
  • kana.value as hiragana:KO
  • return kana.value:KO
  • kana.value as a:KO
  • kana.value as kanak:KO

所以只有“kana.value as kana”无论如何都能奏效......

你们有什么想法发生了什么事吗?这可能是一个错误而不是我的错误吗?

卢瓦克。

PS:我使用php中的graphaware库来调用数据库,但问题是无关的,因为错误也发生在noe4j浏览器中

1 个答案:

答案 0 :(得分:0)

我没有找到此问题的根本原因,但我找到了解决方法。

我不满意让这个问题没有解决,但我不想再花这么多时间在这上面了,我也不希望你们在这方面浪费时间。

<强>变通

所以我做的是修改我的查询的一部分。而不是命名节点“假名”并返回“假名”,我将名称更改为“字符”,我现在返回“的 character.value ”。

它有效,不要问我为什么。

旧查询:

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(kana:item)-[:romaji]->(romaji:item)
where list.name =~'(?i)Hiragana'
return kana.value as item, romaji.value as answer  ORDER BY kana asc

新查询:

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(character:item)-[:romaji]->(romaji:item)
where list.name =~ '(?i)Hiragana' return character.value as item, romaji.value as answer

此致

卢瓦克。