solr找到与查询结果相似的文档

找到与查询结果相似的文档:

http://localhost:8983/solr/select?q=name:edition&mlt=true&mlt.fl=name&mlt.mintf=1&mlt.mindf=1


mlt.fl:按照结果文档的哪一个field求相似。


mlt.mintf:结果文档中的本field的某一个词出现的tf大于此值,才以此词求相似。


mlt.mindf:通上,不过是df。


自定义的显示结果(非xml):

首先定义渲染器和名字:
<queryResponseWriter name="velocity" class="org.apache.solr. request.VelocityResponseWriter"/>
其次定义请求的处理器(包括显示的结果,行数,默认的查询域,查询的格式等等):<requestHandler name="/browse" class="solr.SearchHandler">
<lst name="defaults">
<str name="wt">velocity</str>
<str name="v.template">browse</str>
<str name="v.layout">layout</str>
<str name="title">Solr cookbook example</str>
<str name="defType">dismax</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">*,score</str>
<str name="qf">name</str>
</lst>
</requestHandler>

---------------------------------
匹配相似(moreLikeThis)
他的作用是查找相似的document。

首先在 solrconfig.xml 中配置 MoreLikeThisHandler
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
</requestHandler>


然后我就可以请求 http://localhost:8080/solr/mlt?q=id:7&mlt.true&mlt.fl=name&mlt.mintf=1&mlt.mindf=1
上面请求的意思 查找 id 为 7 的 document ,然后返回与此 document 在 name 字段上相似的其他 document。需要注意的是 mlt.fl 中的 field 的 termVector=true 才有效果
<field name="name" termVector="true" .../>


当然 mlt.fl 也可以添加多个field ,用逗号隔开就行了

 

//相关搜索查询
		List relationList = new ArrayList();
		query = new SolrQuery();
		query.setQuery("title:"+ query_char.toString()+" AND type:2222");  
	        query.addField("title");  
	        query.setStart(0);  
	        query.setRows(10);
	        query.setParam("mlt", "true");
	        query.setParam("mlt.fl", "title");
	        query.setParam("mlt.mintf", "100");
	        query.setParam("mlt.mindf", "1");
	        try {
				QueryResponse response = server.query(query);
				SolrDocumentList docs = response.getResults();
				for (SolrDocument doc : docs) {
					Snaphost host = new Snaphost();
					System.out.println(doc.getFieldValue("title").toString());
					host.setKeyword(doc.getFieldValue("title").toString());
					relationList.add(host);
				}
			} catch (SolrServerException e) {
				e.printStackTrace();
			}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值