【问题标题】:Custom Sorting in Lucene.NetLucene.Net 中的自定义排序
【发布时间】:2016-03-18 20:22:55
【问题描述】:

Lucene.Net2.9.4,但如果可以在我仍然感兴趣的更高版本中),是否可以创建自定义排序算法,就像你可以为C#IComparable<>)一样?

我遇到问题的两种类型:

100000, 100000000, 200000 应该订购100000, 200000, 100000000 并基于小于、大于排序:“>10”、“10 through 50”、“50 through 100”、“<100”(假设范围不重叠) 在Lucene(或Lucene.Net)中是否可以对这些方式中的任何一种进行排序?

【问题讨论】:

  • 你可以写一个自定义的Collector

标签: c# sorting lucene lucene.net string-comparison


【解决方案1】:

如果您想按数字排序(而不是按字典顺序),您应该将该字段索引为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 中的一组范围查询与不同的提升相结合可能就是您所寻找的。​​p>

【讨论】:

  • 为了澄清范围的最后一点 - 我实际上是在尝试对那些特定的字符串进行排序,因为 Lucene 数据已保存表示这四个值之一的值。这是一个下拉列表,人们可以在其中选择这四个特定值之一。
  • @JanusFenix - 我认为没有什么明显的开箱即用可以为您做到这一点。我只是索引某种范围标识符供他们排序(如范围:“
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2011-06-06
  • 2014-06-30
  • 2010-10-27
  • 2013-04-09
相关资源
最近更新 更多