Neo4j – 按相关性排序

我想在Neo4j中按相关性订购返回的数据。

出于我的目的,相关性可以简化为“我正在搜索的单词的索引”,其中较低的索引具有较高的相关性。

我有这三个节点:

node : { Label: PROD properties : { name: "Bearing replacement Skateboard" } } node : { Label: PROD properties : { name: "Skateboard" } } node : { Label: PROD properties : { name: "L7 Skateboard" } } 

我希望他们按此订单退回:

 node : { Label: PROD properties : { name: "Skateboard" // name.indexOf("Skateboard") = 0 } } node : { Label: PROD properties : { name: "L7 Skateboard" // name.indexOf("Skateboard") = 3 } } node : { Label: PROD properties : { name: "Bearing replacement Skateboard" // name.indexOf("Skateboard") = 19 } } 

到目前为止我所拥有的:

 String query = "MATCH (n:PROD) where LOWER(n.name) CONTAINS LOWER({textToSearch}) RETURN n ORDER BY LOWER(n.name) ASC LIMIT 15"; String textToSearch = "Skateboard"; Map queryParams = new HashMap(); queryParams.put("textToSearch", textToSearch); try ( Transaction ignored = database.beginTx(); Result resultSet = database.execute(query, queryParams) ) { Iterator results = resultSet.columnAs("n"); while (results.hasNext()) { Node node = results.next(); /* data processing here */ } } 

这只是通过名称上升来命令结果。 有没有办法告诉neo4j基于n.name.indexOf({textToFind})进行排序?

在Cypher做这样的事情怎么样?

 MATCH (n:PROD) WHERE n.name_lc CONTAINS toLower({textToSearch}) WITH n, SPLIT(n.name_lc, toLower({textToSearch})) as parts RETURN n.name, SIZE(parts[0]) AS leading ORDER BY leading 

为了有效利用上述……

在属性的小写版本上创建索引

 CREATE INDEX ON :PROD(name_lc) 

将常规名称复制到小写版本

 MATCH (n:PPOD) SET n.name_lc = toLower(n.name) 
Interesting Posts