Lucene.Net 中的自定义排序
Custom Sorting in Lucene.Net
在 Lucene.Net
中(2.9.4
,但如果可能在我仍然感兴趣的更高版本中),是否可以创建自定义排序算法,就像您可以为 C#
(IComparable<>
)?
我遇到问题的两种类型:
100000
,100000000
,200000
应该是顺序100000
,200000
,100000000
并基于小于、大于:“>10
”、“10 through 50
”、“50 through 100
”、“<100
”(假设范围不重叠)
在 Lucene
(或 Lucene.Net
)中是否可以使用这两种方式进行排序?
如果你想按数字排序(而不是按字典顺序),你应该将该字段索引为 NumericField:
Field myField = new NumericField("myIntField").setIntValue(100000);
完成后,在该字段上排序应该得到您要查找的数字顺序:
Sort sort = new Sort(new SortField("myIntField", SortField.INT));
我不清楚你所说的按范围排序到底是什么意思,但以这种方式索引,你可以使用 NumericRangeQuery
按范围查询
Query query = NumericRangeQuery.newIntRange("myIntField", 10, 50, true, true);
将 BooleanQuery
中的一组范围查询与不同的提升相结合可能正是您想要的。
在 Lucene.Net
中(2.9.4
,但如果可能在我仍然感兴趣的更高版本中),是否可以创建自定义排序算法,就像您可以为 C#
(IComparable<>
)?
我遇到问题的两种类型:
100000
,100000000
,200000
应该是顺序100000
,200000
,100000000
并基于小于、大于:“>10
”、“10 through 50
”、“50 through 100
”、“<100
”(假设范围不重叠)
在 Lucene
(或 Lucene.Net
)中是否可以使用这两种方式进行排序?
如果你想按数字排序(而不是按字典顺序),你应该将该字段索引为 NumericField:
Field myField = new NumericField("myIntField").setIntValue(100000);
完成后,在该字段上排序应该得到您要查找的数字顺序:
Sort sort = new Sort(new SortField("myIntField", SortField.INT));
我不清楚你所说的按范围排序到底是什么意思,但以这种方式索引,你可以使用 NumericRangeQuery
按范围查询Query query = NumericRangeQuery.newIntRange("myIntField", 10, 50, true, true);
将 BooleanQuery
中的一组范围查询与不同的提升相结合可能正是您想要的。