所以我正在做一个涉及日语的个人项目。在这个项目中,我还使用了 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)。另外,我不觉得我的查询试图将节点的值与其他节点进行比较。
无论如何,我开始修改查询,因为我之前使用过它并且它有效。搜索了一段时间后,我注意到,在我的 return 子句中,如果我将kana.value 作为 item更改为,让我们说kana.value 作为 kana,它突然又可以工作了。
我又更改了该值并得到以下结果:
- kana.value 作为项目:KO
- kana.value 作为假名:好的
- kana.value 作为测试:KO
- kana.value as es : KO
- kana.value 作为问题:KO
- kana.value as romaji : KO
- kana.value 作为平假名:KO
- 返回假名值:KO
- kana.value 作为:KO
- kana.value 为 kanak : KO
因此,无论出于何种原因,只有“kana.value as kana”才有效……
你们知道发生了什么吗?这可能是一个错误而不是我的错误吗?
洛伊克。
PS:我使用php中的graphaware库调用数据库,但问题无关,因为错误也发生在noe4j浏览器中