`
sealbird
  • 浏览: 586527 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义排序<1>

阅读更多
说明:
  用户会员登陆后,根据该会员属于的类别排序(主要表现在查询产品或其他频道时),这样有助于该会员查到属于自已的东西,分类与当前会员相同的排前

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类排序方法

    ### c# List&lt;T&gt;类排序方法 #### 一、初始工作与预备知识 在C#中,`List&lt;T&gt;`是一个非常常用的泛型集合类,它提供了动态数组的功能,可以存储任意数量的相同类型元素。当涉及到对List中的数据进行排序时,我们可以...

    html 表单排序

    而当我们谈论`&lt;table&gt;`表单排序时,我们通常是指如何对`&lt;table&gt;`中的数据行进行升序或降序排列,以便用户可以更有效地浏览和分析信息。这在大型数据集或动态更新的数据中尤其有用。 ### 1. `&lt;table&gt;`的基本结构 一...

    List数据绑定

    这通常通过实现`IComparable&lt;T&gt;`接口在自定义的`T`类中完成,或者在数据绑定时提供一个自定义的排序委托。 2. Check列表头全选问题:在`DataGridView`中,如果某一列的数据类型为布尔值,那么该列的头可能会显示为...

    接口IComparer比较器关于排序

    在.NET中,有许多内置的数据结构和方法支持自定义排序,例如`Array.Sort()`、`List&lt;T&gt;.Sort()`和`Enumerable.OrderBy()`。这些方法都可以接受一个`IComparer&lt;T&gt;`实例作为参数,从而按照你定义的规则进行排序。例如,...

    IList排序(C#)

    - `List&lt;T&gt;.Sort()`:这是`List&lt;T&gt;`类的成员方法,除了要求T实现`IComparable&lt;T&gt;`,还支持自定义排序规则。例如: ```csharp List&lt;string&gt; names = new List&lt;string&gt; { "Tom", "Alice", "Bob" }; names.Sort(); ...

    排序

    例如,如果我们有一个包含自定义类的对象的&lt;vector&gt;,并且想根据某个成员变量进行排序: ```cpp struct MyClass { int value; // 其他成员... }; bool compareByValue(const MyClass& a, const MyClass& b) { ...

    c#使用bindlist绑定datagridview不能自动排序的解决类

    为了解决`BindingList&lt;T&gt;`不支持自动排序的问题,我们可以创建一个自定义的`SortableBindingList&lt;T&gt;`类,继承自`BindingList&lt;T&gt;`,并在其中重写相关的成员方法以支持排序功能。 ```csharp public class ...

    Android里List时间升序排序

    接下来,我们可以使用这个自定义的比较器来对`List&lt;String&gt;`进行排序: ```java List&lt;String&gt; dates = ...; // 初始化日期字符串列表 Collections.sort(dates, new DateComparator()); ``` 这样,`dates`列表就会...

    java集合某个字段按照中文拼音排序.docx

    在Java中,我们可以使用Comparable接口来实现自定义排序。例如,我们可以创建一个Record类,实现Comparable接口,并重写compareTo方法。在compareTo方法中,我们可以使用String的compareTo方法来比较两个字符串的...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下:&lt;br&gt;第1章 开发环境 1&lt;br&gt;&lt;br&gt;1.1 Visual Studio开发环境安装与配置 2&lt;br&gt;&lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2&lt;br&gt;&lt;br&gt;0002 配置合适的Visual Studio 2005...

    自定义table标签和数据展现控件(源码)

    特点&lt;br&gt;在上个table标签的基础上修改了部分代码,支持firefox.&lt;br&gt;新增数据展现控件以便定制更加复杂的table.&lt;br&gt;1、JSP2.0标准自定义标签&lt;br&gt;2、支持数据库后台翻页&lt;br&gt;3、支持排序&lt;br&gt;4、支持firfox&lt;br&gt;4、使用...

    AngularJS中的Directive自定义一个表格

    &lt;td&gt;&gt;&lt;/td&gt; &lt;td&gt;&gt;&lt;/td&gt; &lt;td&gt;&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;div&gt;4行&lt;/div&gt; ● 点击某个th,就对该列进行排序 ● 可以给表头取别名 ● 可以设置某个列是否显示 ● 表格下方有一行显示总行数 我们希望表格按如下方式...

    Java实现的分页工具类

    PageResult&lt;T&gt; result = new PageResult&lt;&gt;(); // 参数校验 if (pageNumber &lt;= 0 || pageSize &lt;= 0) { throw new IllegalArgumentException("页数和每页大小必须大于0"); } try (Connection conn = ...

    C#.NET案例开发集锦代码1-3章

    第一章&lt;br&gt;案例1创建控制台应用程序&lt;br&gt;案例2创建窗口应用程序&lt;br&gt;案例3获取命令行参数&lt;br&gt;案例4条件编译&lt;br&gt;&lt;br&gt;案例1带有排序功能的列表视图控件&lt;br&gt;案例2使用状态栏演示&lt;br&gt;案例3显示隐藏工具栏&lt;br&gt;案例4创建上...

    嵌入式数据库简介-SQLite

    SQLite介绍&lt;br&gt;SQLite的发展&lt;br&gt;SQLite的优势&lt;br&gt;SQLite的缺憾&lt;br&gt;SQLite...&lt;br&gt;自定义排序函数&lt;br&gt;PERL接口&lt;br&gt;SQLite数据库在ASTRAL中的应用&lt;br&gt;SQLite在多级关联中的应用&lt;br&gt;SQLite在IPIS中的应用&lt;br&gt;SQLite在web中...

    QQ群管理工具----共享

    软件名称:QQ群管理工具&lt;br&gt;&lt;br&gt;&lt;br&gt;版本:3.0&lt;br&gt;&lt;br&gt;&lt;br&gt;作者:亚坦软件&lt;br&gt;&lt;br&gt;QQ:10609090&lt;br&gt;&lt;br&gt;E-Mail: asiatain@126.com&lt;br&gt;&lt;br&gt;&lt;br&gt;功能简述:&lt;br&gt;&lt;br&gt;&lt;br&gt;1)具备更新群组成员功能,与QQ成员列表保持同步...

    青年咨询系统

    &lt;br&gt;·支持二级域名管理 &lt;br&gt;·栏目自定义生成文件名规则 &lt;br&gt;·栏目可以排序,并支持是否隐藏栏目 &lt;br&gt;·自定义快捷菜单 &lt;br&gt;·自由标签化管理,自定义信息调用数量,标签自由存放 &lt;br&gt;·回收站管理 &lt;br&gt;·优化...

    新伟咨询系统

    &lt;br&gt;·支持二级域名管理 &lt;br&gt;·栏目自定义生成文件名规则 &lt;br&gt;·栏目可以排序,并支持是否隐藏栏目 &lt;br&gt;·自定义快捷菜单 &lt;br&gt;·自由标签化管理,自定义信息调用数量,标签自由存放 &lt;br&gt;·回收站管理 &lt;br&gt;·优化...

    Java JDK实例宝典

    &lt;br&gt;第1章 Java基础 &lt;br&gt;1.1 转换基本数据类型 &lt;br&gt;1.2 Java的运算符 &lt;br&gt;1.3 控制程序的流程 &lt;br&gt;1.4 计算阶乘 &lt;br&gt;1.5 实现命令行程序 &lt;br&gt;第2章 Java面向对象程序设计 &lt;br&gt;2. 1 复数类 &lt;br&gt;2. 2 equals.chashCode...

    SqlPage 1.2.10.5 版本

    自定义排序的字段&lt;br&gt; 7.修正在除GridView外表格控件绑定空数据库时出错问题&lt;br&gt; 8.修正用户SQL语句后面带分号出错&lt;br&gt; 9.修正降序排序单页显示成升序的错误&lt;br&gt; (4)SqlPage 1.2.2.3 版本:(修改时间:2007-8-9)&lt;br&gt; 1...

Global site tag (gtag.js) - Google Analytics