solr权重
solr权重可以在solrconfig.xml配置,也可以用solrJ直接实现,本人用的是第二种方法,demo比较简单,但是可以看出流程和结果
第一步:先往索引库里添加数据,我这里只添加五条,不要问为什么
for(int i=0;i<5;i++){
//添加数据
SolrInputDocument doc1 = new SolrInputDocument();
doc1.setField("id", Integer.valueOf(i));
doc1.setField("title","一"+Integer.valueOf(i));
doc1.setField("price", "1000"+Integer.valueOf(i*200));
try {
solrServer.add(doc1);
solrServer.commit();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
第二部:直接看代码
SolrQuery sq=new SolrQuery();
sq.set("q", "title:一");//必须有,并且不可以是*:*,
sq.set("defType","dismax");
sq.set("qf","title^1 price^0.1");//这里必须包含查询条件title
sq.set("bf", "sum(abs(price))");<span style="font-family: Arial, Helvetica, sans-serif;">//这里我用的是最简单的一个函数,其实核心在这里,真正运用不会这么简单,具体请搜索solr权重函数</span>
//sq.addSort("updateTime", ORDER.desc);
//getHighlight(sq);
QueryResponse sr;
try {
SolrInputDocument doc = new SolrInputDocument();
//SolrInputField a = doc.getField("");
sr = solrServer.query(sq);
SolrDocumentList doclist=sr.getResults();
Map<String,Map<String,List<String>>> highlightMap=sr.getHighlighting();
//计数器
int i=0;
for (SolrDocument solrDocument : doclist) {
System.out.println("标题:" +solrDocument.get("title")+"\n\n");
if(highlightMap.get(solrDocument.get("id")).get("price")==null){
System.out.println("正文:" +solrDocument.get("price")+"\n\n");
}
++i;
}
System.out.println(i+"个");
} catch (SolrServerException e) {
e.printStackTrace();
}
目前的demo还有一点bug,就是进首页,如果找到解决方案我会来更新。
看一下结果吧:很大不同
这是没有权重排序的结果
标题:一0
正文:10000.0
标题:一1
正文:1000200.0
标题:一2
正文:1000400.0
标题:一3
正文:1000600.0
标题:一4
正文:1000800.0
5个
这是有权重排序的结果
标题:一4
正文:1000800.0
标题:一3
正文:1000600.0
标题:一2
正文:1000400.0
标题:一1
正文:1000200.0
标题:一0
正文:10000.0
5个
还没有评论,来说两句吧...