所以我正在从事涉及日语的个人项目。在这个项目中,我还使用了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 kana”无论如何都能奏效......
你们有什么想法发生了什么事吗?这可能是一个错误而不是我的错误吗?
卢瓦克。
PS:我使用php中的graphaware库来调用数据库,但问题是无关的,因为错误也发生在noe4j浏览器中
答案 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
此致
卢瓦克。