Lucene neo4j使用布尔字段排序

时间:2012-08-28 11:59:14

标签: sorting lucene neo4j

我已经使用布尔属性索引了一些文档(neo4j的节点),这些属性并不总是存在。 例如。 Node1

  

标签:"标签A"

节点2:

  

标签:"标签A" (注意,node1的相同标签)   特殊:真实

目标是让Node2高于节点1进行查询"标记A"。

这里是代码:

Index<Node> fulltextLucene = graphDb.index().forNodes( "my-index" );
Sort sort = new Sort(new SortField[] {SortField.FIELD_SCORE,
                     new SortField("special", SortField.????, true) }); 
IndexHits<Node> results = fulltextLucene.query( "label", new QueryContext( "label A").sort(sort));

我该如何实现?

由于

2 个答案:

答案 0 :(得分:0)

你确定索引一个只有2个可能值(true,false)的属性吗? 因为索引意味着创建一个唯一的值,通过它您可以知道数据库中的位置。这个独特的价值取决于房产的价值。

当你有许多具有相同值的属性时,索引会创建所谓的冲突 - 简单地说,它有多个索引查询结果。当您按顺序遍历图形(没有索引)时,您还有几个必须选择的结果。因此,在只有2个属性值的许多节点上拥有索引可能毫无价值。

我建议使用此优先级值创建1个节点,并在需要确定节点优先级时与其建立关系。

答案 1 :(得分:0)

如果要对这样的布尔值进行排序,可以使用字符串排序:SortField.STRING。

这将对值进行合理排序,首先是假,然后是真。没有值(null)是假的。