关于lucene自定义排序的问题

zhulei0429 2008-07-01 10:08:46
例:
记录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;
}
}

...全文
477 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufonec 2008-07-02
  • 打赏
  • 举报
回复
这个问题我也遇到过,我现在加了一个群,这个群人气较好,也的确有高手 ,不但可以交流问题,而且还可以接项目赚钱,QQ群号是:六/四/七/九/八/六/五/二,不要说 我做广告,看看便知,如需要的话加入试试,如果你发现好的交流群也别忘 了告诉我啊!呵呵!

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧