【Lucene】利用MoreLikeThis实现"你可能感兴趣的"搜索

import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queries.mlt.MoreLikeThis;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;

import dev.lzq.search.lucene4x.commons.Manager;

public class TestMoreLikeThisQuery 
{
	public static void main(String[] args) throws IOException 
	{
		IndexReader reader = Manager.getIndexReader();
		IndexSearcher searcher = Manager.getIndexSearcher();

		int refDocId = 1;
		Document refDoc = searcher.doc(refDocId);
		System.out.println("关联文档: 【" + refDoc.get("Title") + "】" + refDoc.get("Introduction"));

		MoreLikeThis mlt = new MoreLikeThis(Manager.getIndexReader());
		mlt.setFieldNames(new String[]{"Search_Field_Title", "Introduction"});
		// 默认值是2,建议自己做限制,否则可能查不出结果  
		mlt.setMinTermFreq(1);
		// 默认值是5,建议自己做限制,否则可能查不出结果  
		mlt.setMinDocFreq(1);
		mlt.setAnalyzer(Manager.getAnalyzer());
		// query实际质上是BooleanQuery。
		//  MoreLikeThis的原理是根据你提供的参考Document 和 Fields, 利用Analyzer给该Document的Fileds做分词, 然后拼接BooleanQuery做Occur.SHOULD搜索
		Query query = mlt.like(refDocId);

		TopDocs tds = searcher.search(query, 10);
		ScoreDoc[] sds = tds.scoreDocs;
		for(ScoreDoc sd : sds)
		{
			Document doc = searcher.doc(sd.doc);
			System.out.println("相似文档: 【" + doc.get("Title") + "】 " + doc.get("Introduction"));
		}
	}
}

其中,Manager类的代码我没贴出来, IndexReader, IndexSearcher, Analyzer其实就是普通的新建对象,没什么封装的东西。

时间: 2024-07-31 23:21:10

【Lucene】利用MoreLikeThis实现"你可能感兴趣的"搜索的相关文章

【opencv入门之二】感兴趣区域ROI,线性混合addWeighted

参考网站: http://blog.csdn.net/poem_qianmo/article/details/20911629 1.感兴趣区域ROI //[2]定义一个Mat类型并给其设定ROI区域 Mat imageROI = srcImage1( Rect(200, 250, logoImage.cols, logoImage.rows )); //[3]加载掩摸(必须是灰度图) Mat mask = imread( "dota_logo.jpg", 0 ); //[4]将掩摸拷贝

我对什么都感兴趣,可我迷茫了(转载)

我对什么都感兴趣,可我迷茫了 2013-12-05 余弦 懒人在思考 我收到一个同学给我的邮件问了个在我看来属于“太阳系”级的难题,比宇宙终极难题还差那么些^^ 他问: ----------------- 这几天一直挺困惑.说下我的问题,你有空的时候帮我解答下吧. 今天问自己个问题,找个自己的特长现在开始发展它. 基本上以后主要就靠这个特长工作. 但我不知道自己到底对什么非常感兴趣,并能足以支撑我发展研究下去. 我现在对很多都很有兴趣,这个好玩的程序,渗透个网站,XSS,偶尔挖洞,看见移动设备安

获取图片中感兴趣区域的信息(Matlab实现)

内容提要 如果一幅图中只有一小部分图像你感兴趣(你想研究的部分),那么截图工具就可以了,但是如果你想知道这个区域在原图像中的坐标位置呢? 这可是截图工具所办不到的,前段时间我就需要这个功能,于是将其用Matlab实现. 其实只要用到Matlab中的两个函数: 函数: imrect 函数: getPosition 如果要截取其中的部分图像,就离不开下面的函数: 函数: imcrop 代码实现 clc; clear; close all; %-----------------------------

最近对数据挖掘感兴趣了,为什么国外的课程会这么好

贴上671coder的一篇帖子 : 原址见 :http://blog.csdn.net/liuqiyao_01/article/details/37904611 前言 事实上有许多的途径可以了解机器学习,也有许多的资源例如书籍.公开课等可为所用,一些相关的比赛和工具也是你了解这个领域的好帮手.本文我将围绕这个话题,给出一些总结性的认识,并为你由程序员到机器学习高手的蜕变旅程中提供一些学习指引. 机器学习的四个层次 根据能力可以将学习过程分成四个阶段.这也是一个有助于我们将所有学习资源进行分类的好

opencv图像及视频感兴趣区域设置

之前学过的简单绘图方法,例如矩形,椭圆等,今天试着在视频图像中用矩形标注感兴趣区域(ROI) <----图像篇----> #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace std;

opencv中感兴趣区域以及mask的使用

在图像处理的过程中,我们时常需要对指定区域或目标进行操作,这个区域我们称之为感兴趣区域.在学习opencv的初级阶段,对于感兴趣区域的操作方法是必须要掌握的. 比如下图: 我们获取到一帧图像Img,它里面有两个目标,一个蓝色块和一个红色块,我们一般会经常碰到以下三种情况: (1)我们希望将Img中的蓝色目标提取出来并另存为一个图像: (2)我们希望将Img中不是蓝色目标的其他目标都隐藏起来,只显示蓝色目标,或只对蓝色目标的区域进行图像处理. (3)我们只希望对Img中红色目标区域进行处理. 我们

最近对单元测试很感兴趣

自从上次和春哥聊完什么是优秀的程序员之后,我就一直在思考.我觉得我现在最能做好的就是对我自己这个系统的掌控力,因为从一开始小组这个系统就是由我一个人开发的.由于今年刚刚接触Linux,去年年末刚接触Python,所以对整个环境不熟悉.我粗粗估计了一下,我感觉我花时间最多的就是测试.而且测试后还是会有问题,还导致了线上产品直接挂掉.后来我们的技术老大告诉我,最好所有的事情都让计算机做,包括发布,包括监控,包括日志分析,当然也包括测试.后来我决定以后每开发一个功能就相应写一个单元测试,这样只要写一遍

[zt] ROI (Region of Interest) 感兴趣区域 OpenCV

在以前介绍IplImage结构的时候,有一个重要的参数——ROI.ROI全称是”Region Of Interest”,即感兴趣的区域.实际上,它是IPL/IPP(这两个是Inter的库)结构IplROI的实例.IplROI包含xOffset.yOffset.height.width和coi成员变量.其中COI代表channel of interest(感兴趣的通道).ROI的思想是:一旦设定ROI,通常组用于整幅图像的函数便只会对ROI所表示的子图像进行操作.如果COI被设置非0值,则对该图像

你写的并不是你真正感兴趣的!

买了一本讲电影剧本的书,翻开第一章却深深刺激了我,这是在说电影剧本吗?--这是在说游戏制作吗?!讲得实在太好了,在网上找到电子版,敬录如下: 你的剧本逊毙了! 作者: (美)威廉?M?埃克斯 第一场 构 思 □√ 1.你写的并不是你真正感兴趣的! 写那些让你深深着迷欲罢不能的东西,那些让你血液沸腾,让你午夜难以入眠,让你在鸡尾酒会上不顾场合热烈争论,甚至不惜和老友闹翻的东西. "写剧本将改变你的人生,就算你不能卖掉它,最起码你改变了你的人生." --约翰·特鲁比 我们应该读懂好莱坞传奇