说明:
用户会员登陆后,根据该会员属于的类别排序(主要表现在查询产品或其他频道时),这样有助于该会员查到属于自已的东西,分类与当前会员相同的排前
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermEnum;
import org.apache.lucene.index.TermDocs;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.SortField;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.SortComparatorSource;
import org.apache.lucene.search.ScoreDocComparator;
import java.io.IOException;
import java.util.Map;
import java.util.WeakHashMap;
public class DichanSortExtend implements SortComparatorSource {
public static String[] categorys;
private String category;
private final Map readerCache = new WeakHashMap();
public DichanSortExtend(){
}
/*****传入的类别*******/
public DichanSortExtend(String category) {
this.category = category;
}
public void iniCategory(IndexReader reader,String sortname) throws IOException{
final TermEnum enumerator = reader.terms(new Term(sortname, ""));
categorys = new String[reader.maxDoc()];
if (categorys.length > 0) {
TermDocs termDocs = reader.termDocs();
try {
if (enumerator.term() == null) {
throw new RuntimeException("no terms in field " + sortname);
}
do {
Term term = enumerator.term();
if (term.field() != sortname)
break;
termDocs.seek(enumerator);
while (termDocs.next()) {
categorys[termDocs.doc()] = term.text();
}
} while (enumerator.next());
} finally {
termDocs.close();
}
}
}
public ScoreDocComparator newComparator(IndexReader reader, String sortname)
throws IOException {
return new CategoryScoreDocComparator( category);
}
private static class CategoryScoreDocComparator implements ScoreDocComparator {
String category;
public CategoryScoreDocComparator(String category)
{
this.category=category;
}
// 在此处定义自已的排序方式,根据登陆的会员类别,来对检索出的记录进行排序
public int compare(ScoreDoc i, ScoreDoc j) {
if(categorys[i.doc].equals(this.category)){
return 1;
}else if(categorys[j.doc].equals(this.category)){
return -1;
}
return 0;
}
public Comparable sortValue(ScoreDoc data) {
return new String(categorys[data.doc]);
}
public int sortType() {
return SortField.STRING;
}
}
public String toString() {
return "";
}
public static void main(String[] args) throws IOException{
DichanSortExtend sortext = new DichanSortExtend();
System.out.println(sortext.toString());
}
}
Sort sort = new Sort(new SortField("cate",new SortExtendSearch(类别ID)));
并具要初始化
分享到:
相关推荐
### c# List<T>类排序方法 #### 一、初始工作与预备知识 在C#中,`List<T>`是一个非常常用的泛型集合类,它提供了动态数组的功能,可以存储任意数量的相同类型元素。当涉及到对List中的数据进行排序时,我们可以...
而当我们谈论`<table>`表单排序时,我们通常是指如何对`<table>`中的数据行进行升序或降序排列,以便用户可以更有效地浏览和分析信息。这在大型数据集或动态更新的数据中尤其有用。 ### 1. `<table>`的基本结构 一...
这通常通过实现`IComparable<T>`接口在自定义的`T`类中完成,或者在数据绑定时提供一个自定义的排序委托。 2. Check列表头全选问题:在`DataGridView`中,如果某一列的数据类型为布尔值,那么该列的头可能会显示为...
在.NET中,有许多内置的数据结构和方法支持自定义排序,例如`Array.Sort()`、`List<T>.Sort()`和`Enumerable.OrderBy()`。这些方法都可以接受一个`IComparer<T>`实例作为参数,从而按照你定义的规则进行排序。例如,...
- `List<T>.Sort()`:这是`List<T>`类的成员方法,除了要求T实现`IComparable<T>`,还支持自定义排序规则。例如: ```csharp List<string> names = new List<string> { "Tom", "Alice", "Bob" }; names.Sort(); ...
例如,如果我们有一个包含自定义类的对象的<vector>,并且想根据某个成员变量进行排序: ```cpp struct MyClass { int value; // 其他成员... }; bool compareByValue(const MyClass& a, const MyClass& b) { ...
为了解决`BindingList<T>`不支持自动排序的问题,我们可以创建一个自定义的`SortableBindingList<T>`类,继承自`BindingList<T>`,并在其中重写相关的成员方法以支持排序功能。 ```csharp public class ...
接下来,我们可以使用这个自定义的比较器来对`List<String>`进行排序: ```java List<String> dates = ...; // 初始化日期字符串列表 Collections.sort(dates, new DateComparator()); ``` 这样,`dates`列表就会...
在Java中,我们可以使用Comparable接口来实现自定义排序。例如,我们可以创建一个Record类,实现Comparable接口,并重写compareTo方法。在compareTo方法中,我们可以使用String的compareTo方法来比较两个字符串的...
C#编程经验技巧宝典源代码,目录如下:<br>第1章 开发环境 1<br><br>1.1 Visual Studio开发环境安装与配置 2<br><br>0001 安装Visual Studio 2005开发环境须知 2<br><br>0002 配置合适的Visual Studio 2005...
特点<br>在上个table标签的基础上修改了部分代码,支持firefox.<br>新增数据展现控件以便定制更加复杂的table.<br>1、JSP2.0标准自定义标签<br>2、支持数据库后台翻页<br>3、支持排序<br>4、支持firfox<br>4、使用...
<td>></td> <td>></td> <td>></td> </tr> </tbody> </table> <div>4行</div> ● 点击某个th,就对该列进行排序 ● 可以给表头取别名 ● 可以设置某个列是否显示 ● 表格下方有一行显示总行数 我们希望表格按如下方式...
PageResult<T> result = new PageResult<>(); // 参数校验 if (pageNumber <= 0 || pageSize <= 0) { throw new IllegalArgumentException("页数和每页大小必须大于0"); } try (Connection conn = ...
第一章<br>案例1创建控制台应用程序<br>案例2创建窗口应用程序<br>案例3获取命令行参数<br>案例4条件编译<br><br>案例1带有排序功能的列表视图控件<br>案例2使用状态栏演示<br>案例3显示隐藏工具栏<br>案例4创建上...
SQLite介绍<br>SQLite的发展<br>SQLite的优势<br>SQLite的缺憾<br>SQLite...<br>自定义排序函数<br>PERL接口<br>SQLite数据库在ASTRAL中的应用<br>SQLite在多级关联中的应用<br>SQLite在IPIS中的应用<br>SQLite在web中...
软件名称:QQ群管理工具<br><br><br>版本:3.0<br><br><br>作者:亚坦软件<br><br>QQ:10609090<br><br>E-Mail: asiatain@126.com<br><br><br>功能简述:<br><br><br>1)具备更新群组成员功能,与QQ成员列表保持同步...
<br>·支持二级域名管理 <br>·栏目自定义生成文件名规则 <br>·栏目可以排序,并支持是否隐藏栏目 <br>·自定义快捷菜单 <br>·自由标签化管理,自定义信息调用数量,标签自由存放 <br>·回收站管理 <br>·优化...
<br>·支持二级域名管理 <br>·栏目自定义生成文件名规则 <br>·栏目可以排序,并支持是否隐藏栏目 <br>·自定义快捷菜单 <br>·自由标签化管理,自定义信息调用数量,标签自由存放 <br>·回收站管理 <br>·优化...
<br>第1章 Java基础 <br>1.1 转换基本数据类型 <br>1.2 Java的运算符 <br>1.3 控制程序的流程 <br>1.4 计算阶乘 <br>1.5 实现命令行程序 <br>第2章 Java面向对象程序设计 <br>2. 1 复数类 <br>2. 2 equals.chashCode...
自定义排序的字段<br> 7.修正在除GridView外表格控件绑定空数据库时出错问题<br> 8.修正用户SQL语句后面带分号出错<br> 9.修正降序排序单页显示成升序的错误<br> (4)SqlPage 1.2.2.3 版本:(修改时间:2007-8-9)<br> 1...