在Lucene.net实现自定义排序
public interface SortComparatorSource
{
ScoreDocComparator NewComparator(IndexReader reader , System.String fieldname) ;
}
public interface ScoreDocComparator
{
int Compare(ScoreDoc i , ScoreDoc j) ;
System.IComparable SortValue(ScoreDoc i) ;
int SortType() ;
}
涉及到的一个类:
public class ScoreDoc
{
public float score ;
public int doc ;
public ScoreDoc(int doc , float score)
{
this.doc = doc ;
this.score = score ;
}
}
Lucene.net 2.0包含的SortType有:
在Lucene.Net.Search.SortField里定义的:
public class SortField
{
public const int SCORE = 0 ; //相关度
public const int DOC = 1 ; //文挡号
public const int AUTO = 2 ; //自动识别
public const int STRING = 3 ; //字符型
public const int INT = 4 ; //int
public const int FLOAT = 5 ; //float
public const int CUSTOM = 9 ; //自定义
..
}
少了DateTime,那就实现DateTime类型的自定义排序来测试下:
Lucene.Net.Search.ScoreDocComparator接口的实现类:
public class DateDocComparator : Lucene.Net.Search.ScoreDocComparator
{
private string fieldname = null;
private System.IComparable[] cachedValues ;
public DateDocComparator(System.IComparable[] cachedValues, string fieldname)
{
this.cachedValues = cachedValues;
this.fieldname = string.Intern(fieldname) ;
}
public int Compare(ScoreDoc i, ScoreDoc j)
{
return this.cachedValues[i.doc].CompareTo(this.cachedValues[j.doc]) ;
}
public System.IComparable SortValue(ScoreDoc i)
{
return this.cachedValues[i.doc] ;
}
public int SortType()
{
return Lucene.Net.Search.SortField.CUSTOM ;
}
}
Lucene.Net.Search.SortComparatorSource接口的实现类:
public class DateSortComparatorSource : Lucene.Net.Search.SortComparatorSource
{
public ScoreDocComparator NewComparator(Lucene.Net.Index.IndexReader reader, System.String field)
{
return new DateDocComparator(GetCustom(reader, field), field);
}
protected virtual System.IComparable[] GetCustom(Lucene.Net.Index.IndexReader reader, System.String field)
{
System.IComparable[] retArray = new System.IComparable[reader.MaxDoc()];
Lucene.Net.Index.TermDocs termDocs = reader.TermDocs();
Lucene.Net.Index.TermEnum termEnum = reader.Terms(new Lucene.Net.Index.Term(field, ""));
try
{
do
{
Lucene.Net.Index.Term term = termEnum.Term();
if (term == null || term.Field() != field)
break;
System.IComparable termval = Lucene.Net.Documents.DateTools.StringToDate(term.Text()) ;
termDocs.Seek(termEnum);
while (termDocs.Next())
{
retArray[termDocs.Doc()] = termval;
}
}
while (termEnum.Next());
}
finally
{
termDocs.Close();
termEnum.Close();
}
return retArray;
}
}
使用:
Sort sort = new Sort(new SortField("datecreated",new DateSortComparatorSource(),true)) ;
转载于:https://www.cnblogs.com/peida/archive/2008/11/27/1341920.html
在Lucene.net实现自定义排序相关推荐
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- SpringDataJpA复杂查询实现自定义排序
需求: 列表页面实现按合同状态自定义排序 private Specification<TblContractPre> whereClause(final TblContractPre en ...
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- MapReduce编程实例之自定义排序
任务描述: 给出一组数据,自定义排序的样式,第一列降序,相同时第二列升序 example Data: 2013 1 2013 5 2014 5 2014 8 2015 9 2015 4 Code: p ...
- R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序.自定义排序 目录 R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序
- pandas dataframe中的列进行重新排序、倒排、正排、自定义排序详解及实践
pandas dataframe中的列进行重新排序,pandas dataframe列重排.倒排.正排.自定义排序详解及实践 实施数据构建: import pandas as pd import nu ...
- 先随机后排序的oracle,Oracle用decode函数或CASE-WHEN实现自定义排序
Oracle用decode函数或CASE-WHEN实现自定义排序 1 问题 对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序.但排序规则是默认的,数字 ...
- java hashmap 无序,【Java】HashMap自定义排序
HashMap中的对象根据成员进行自定义排序 Map是Java中最常用的存储对象的集合类之一,存储在HashMap中的对象在取出时是无序的,下文以示例介绍了如果对HashMap中存储的对象根据成员进行 ...
- DEV控件自定义排序实现
一般的控件或者组件都支持按照某一列进行排序.但是,这种排序是根据数据源里的数据默认按照降序或升序排序的,同时这样的排序与字段的类型有关. 假设现在字段的类型是字符串类型 ,但是,存储的数据时数字加一些 ...
最新文章
- 计算机二级ms office excel,计算机二级Msoffice考试excel答案.docx
- Android开发常用工具类
- 9种高性能高可用高并发的技术架构
- 【示例】Lucene创建索引库编程步骤
- (转)快速统计二进制中1的个数
- 内核中用于数据接收的结构体struct msghdr以及iovec介绍
- 什么是VGA光纤收发器?
- python实现排列组合公式算法_朴素贝叶斯算法的Python实现
- LeetCode - Medium - 264. Ugly Number II
- 获知哪个函数调用了本函数及它的类名
- Linux Socket学习--面向非连接的协议
- Java基础__Integer类型中的自动装箱
- 拓端tecdat|R语言基于Garch波动率预测的区制转移交易策略
- css的写法 有点凌乱(养成这习惯 神马浏览器兼容都是浮云 so easy)
- tsql 和 clr 的性能实测比对
- 5款开源BI系统倾力推荐,企业信息化的利器
- 关于html的实训日志,满足你的甜蜜幻想, 《我与她的实习日志》登陆NS
- epson l201 l200清零软件 中文版 l111 l101清零软件 L350 L353 清零软件
- 谷歌浏览器翻译显示服务器失败,谷歌浏览器翻译失败怎么办
- 带状线超宽带电桥设计