solr自定义排序

solr自定义排序,第1张

缺省solr就是按照score desc进行排序的,至于为何你的查询结果和数据库不一样,那是因为solr和数据库的索引方式不同引起的,不知道你的schema怎么定义的,solr中主要根据doc中term出现的频率也叫TF(term frequency)来判断文档的价值,即如果一个单词在一个文档中出现的频率高则由于那些在很多不同文档中出现的单词的优先级。

public static Map queryByGroup(String qStr,String groupField,String sortField,boolean asc,Integer pageSize,Integer pageNum){

Map rmap = new LinkedHashMap()

try {

SolrServer server = getSolrServer()//getSolrServer() 方法就是返回一个CommonsHttpSolrServer

SolrQuery query = new SolrQuery()

if(qStr!=null&&qStr.length()>0)

query.setQuery(qStr)

else

query.setQuery("*:*")//如果没有查询语句,必须这么写,否则会报异常

query.setIncludeScore(false)//是否按每组数量高低排序

query.setFacet(true)//是否分组查询

query.setRows(0)//设置返回结果条数,如果你时分组查询,你就设置为0

query.addFacetField(groupField)//增加分组字段

query.setFacetSort(true)//分组是否排序

query.setFacetLimit(pageSize)//限制每次返回结果数

query.setSortField(sortField,asc SolrQuery.ORDER.asc :SolrQuery.ORDER.desc )//分组排序字段

query.set(FacetParams.FACET_OFFSET,(pageNum-1)*pageSize)//当前结果起始位置

QueryResponse rsp = server.query( query )

List countList = rsp.getFacetField(groupField).getValues()

List returnList = new ArrayList()

if(pageNum*pageSize0)

rmap.put(count.getName(),(int) count.getCount())

}

} catch (Exception e) {

e.printStackTrace()

}

return rmap

}

首先,updatetime靠前,这个比较容易sort=updatetime desc

其次,标题匹配靠前,如果改动较小的情况下,只要在搜索的时候增加title字段的权重即可,如果想绝对的靠前,那么需要对lucene的相似度打分公式进行相应的修改


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11392141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存