关于lucene自定义排序的问题
例:
记录1: 娱乐$4 美食$5
记录2: 娱乐$6 美食$2
我要按着每个关键字后面的数字排序
比如:
搜索"娱乐" 记录2娱乐后面的是数字是6就排在第一
搜索"娱乐"和"美食" 那么就把俩个关键字后面的加在一起,记录1后面的数字是4+5,记录2是6+2这样记录1就是第一
我用Lucene的MySortComparatorSource类做了自定义排序,发现lucene是先排序后在把记录按给的条件进行晒选,这样一来弄的很慢
请问下有没什么方法可以先把记录晒出来在排序的?
下面是实现排序的方法
/**
* @param s 要排的字段
* @param reader
* @param fieldname
* @param where 传进来的关键字
* @param splitstr 拆分时候的字符
* @throws IOException
*/
public MyScoreDocComparator(String s,IndexReader reader, String fieldname,String where,String splitstr) throws IOException
{
order = new Integer[reader.maxDoc()];
for(int i = 0;i< reader.maxDoc();i++) //循环数据
{
Document doc =reader.document(i);
int count=0;
String temp=doc.get(s)==null?"":doc.get(s).toString(); //去得要排字段里面内容
String[] str=temp.split(" "); //按" "拆分成数组
for(int x=0;x<str.length;x++)
{
String strx=str[x].indexOf("$")==-1?"":str[x].substring(0,str[x].indexOf("$")); //把关键字和后面直拆开
if(where.contains(strx+",")) //如果有这关键字就在 count里面把关键字的直加上
{
try {
count += Integer.parseInt(str[x].substring(str[x].indexOf(splitstr)+1,str[x].length()));
} catch (Exception e) {
System.out.println(str[x]+" 转换时候错误:"+e.getMessage());
e.printStackTrace();
count +=0;
}
}
}
order[i]=count;
}
}