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))");//这里我用的是最简单的一个函数,其实核心在这里,真正运用不会这么简单,具体请搜索solr权重函数

		
		
		//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>> 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个



你可能感兴趣的:(solr权重)