我们正在使用neo4j密码查询在我们的网站中进行搜索。因此,除了查询的优化之外,一切都很好。我们正在获取搜索结果,但可能与我们缺少的经验和对密码查询的全面了解并不完全相同。
在文本框中,将搜索字符串发送到按键查询中
处理程序是指在输入每个字母时执行查询。喜欢
例如v然后像这样,直到我们进入太空,它将
将其视为一个字符串,结果将相应显示,但是
问题是当我们进入空间并开始写字母,然后再次形成字符串时,结果波动严重。
例:
查询1:MATCH (n:user)<-[:userinteresttag]-(tag) where ANY(m in split(n.username," ") where m STARTS WITH 'vartika' ) RETURN distinct n.username
QUERY2:MATCH (n:user)<-[:userinteresttag]-(tag) where ANY(m in split(n.username," ") where m STARTS WITH 'vartika' or m STARTS WITH 'jain') RETURN distinct n.username order by n.username
问题:-
由于我正在向您显示不使用分隔字母的全字符串搜索,因此仍然可以在图像中看到,我们希望第一个结果出现在vartika jain移到2的情况下,但事实并非如此。
因此,当我们为钥匙处理器工作时,搜索结果vartika jain会到达我们不想要的最后位置。
问题:-因此,有什么方法可以优化结果,以便我们在Google搜索中获得最佳结果。
最佳答案
看来您应该以此来计算比赛的次数和顺序。
MATCH (n:user)
WITH n, size([m in split(n.username, ' ') WHERE m STARTS WITH 'vartika' OR m STARTS WITH 'jain']) AS matches
RETURN n.username
ORDER BY matches DESC
我删除了
[:userinteresttag]
关系和tag
节点,因为您没有在查询中使用它。电影图中的示例:
MATCH (p:Person)
WITH p, size([x IN split(p.name, ' ') WHERE x STARTS WITH 'Tom' OR x STARTS WITH 'Hanks']) AS matches
RETURN p.name, matches
ORDER BY matches DESC
LIMIT 5
╒════════════╤═══════╕
│p.name │matches│
╞════════════╪═══════╡
│Tom Hanks │2 │
├────────────┼───────┤
│Tom Cruise │1 │
├────────────┼───────┤
│Tom Skerritt│1 │
├────────────┼───────┤
│Tom Tykwer │1 │
├────────────┼───────┤
│Keanu Reeves│0 │
└────────────┴───────┘
但是实际上,您应该将它们的名字和姓氏存储在单独的属性中,对其进行索引,并对这些索引属性使用
STARTS WITH
。