Neo4j Cypher查询排序时出现Double(NaN)类型转换错误求助
解决Cypher排序时NaN引发的类型错误问题
问题出在apoc.text.sorensenDiceSimilarity偶尔返回NaN值,而Cypher排序操作无法处理NaN类型,导致类型转换错误。你需要在计算出相似度后,先过滤掉NaN记录再执行排序。
以下是修正后的查询语句:
MATCH (news:News {newsId: "/infografik/jurnalist/turkiye-sma-hastaligi-icin-yeni-adimlar-atiyor-26685"}) WHERE news.cleanTitle IS NOT NULL MATCH (otherNews:News {category: news.category}) WHERE news <> otherNews AND otherNews.cleanTitle IS NOT NULL WITH otherNews, apoc.text.sorensenDiceSimilarity(news.cleanTitle, otherNews.cleanTitle) AS sorensen // 过滤掉无效的NaN值,确保排序时都是有效数值 WHERE sorensen IS NOT NaN ORDER BY sorensen DESC LIMIT 10 RETURN otherNews.title, sorensen, otherNews.category;
关键说明:
- 你之前尝试过滤Null或NaN未成功,大概率是过滤时机不对——必须在计算出
sorensen值之后执行过滤,否则无法判断该值是否为NaN。 - 若不想丢弃这些记录,也可以给NaN设置一个默认值(比如0),替换过滤相关的语句为:
但这种方式会将无效相似度的记录排在末尾,需根据业务需求选择。WITH otherNews, CASE WHEN apoc.text.sorensenDiceSimilarity(news.cleanTitle, otherNews.cleanTitle) IS NaN THEN 0 ELSE apoc.text.sorensenDiceSimilarity(news.cleanTitle, otherNews.cleanTitle) END AS sorensen
内容的提问来源于stack exchange,提问作者Alp Buğra Aker
相关产品推荐
相关产品推荐

