lucene3对结果按照个人意愿排序

mengchanmian 2010-07-26 04:48:12
我最近在搞一个关于搜索的开发,采用的技术是最新的lucene3.0.2,采用的分词器是IKAnalyzer3.2.3,在建索引的时候使用的是IK里面的相关度IKSimilarity.如果查出来的结果顺序不是我想要的.

建索引的时候什么也不做,采用默认的(如权重可能影响打分.我不设置权重).一切的结果想在查询的时候设置一下.
也就是说在lucene打分公式基础之上加上我人为的标准化因子.



方法名:
findCommonMultiSearchDAO(IndexSearcher[] searcher, Query query , String ... cond )


MultiSearcher multiSear = new MultiSearcher(searcher);
multiSear.setSimilarity(new IKSimilarity());

TopScoreDocCollector topdoc = TopScoreDocCollector.create(Integer.valueOf(bundle.getString("query.size")), true);

//返回指定的前几条,query.size,在配置文件中配置
multiSear.search(query,topdoc);
ScoreDoc[] hits = topdoc.topDocs().scoreDocs;
//得到总数
int sta = 0 ;
int end = Integer.valueOf(bundle.getString("query.size")) ;

if("1".equalsIgnoreCase(cond[0]))
{
//表示需要分页
sta = Integer.valueOf(cond[1].trim());
end = Integer.valueOf(cond[2].trim());
if(end > topdoc.getTotalHits() )
{
end = topdoc.getTotalHits() ;
}

//设置分页
topdoc = TopScoreDocCollector.create(topdoc.getTotalHits(), true);

//拿到指定的条数,指定开始记录-->结束记录
multiSear.search(query,topdoc);
hits = topdoc.topDocs(sta, end).scoreDocs;
}

resultMap.put("totalRec", topdoc.getTotalHits() );

//拼装对象放在List里面
List<CommonObj> objList = new ArrayList<CommonObj>();
//POI对象
for (int i = 0 ; i < hits.length ; i++)
{
Document doc = multiSear.doc(hits[i].doc);
CommonObj obj = new CommonObj();
obj.setId(Long.valueOf(doc.get("id")));
obj.setName(doc.get("name"));
obj.setPinyin(doc.get("pinyin"));
obj.setEnglishname(doc.get("englishname"));
obj.setTiroscode(Integer.valueOf(doc.get("tiroscode")));
obj.setAreacode(Integer.valueOf(doc.get("areacode")));
obj.setGoem(doc.get("goem"));
obj.setPathname(doc.get("pathname"));
obj.setPoigid(Long.valueOf(doc.get("poigid")));
obj.setBoost(doc.get("boost"));
obj.setSource(doc.get("source"));
obj.setScore(hits[i].score);
objList.add(obj);
}


以上提供的代码是底层封装的查询代码,加入我自己的标准化因子,应该怎么做.看了一下lucene的源代码,好像每个查询对象或者weight.实现方式比较复杂.
如果实现我的需求,请问有没有好一点的建议或者方法呢?好一点的解决方案呢?
...全文
162 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Spancer 2011-06-17
  • 打赏
  • 举报
回复
你有排序么???
balasubramaniam 2010-07-29
  • 打赏
  • 举报
回复
楼主发点 lucene的学习资料看看啊。 网上很难找的。 就找到一个英文的pdf。
mengchanmian 2010-07-27
  • 打赏
  • 举报
回复
大家没有遇到过这样的问题吗?

帮忙顶起来

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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