Lucene-排序+高亮

public class SortTest {
	/**
	 * 1、相同的结构,相同的关键词,得分一样
	 * 2、相同的结构,不同的关键词,得分不一样,一般来说中文比较高
	 * 3、不同的结构,关键词出现的次数越多,得分越高
	 * 4、利用document.setBoost(100)可以人为的提高相关度得分
	 * @throws Exception
	 */
	@Test
	public void testSearchIndex() throws Exception{
		IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.directory);
		QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[]{"title","content"}, LuceneUtils.analyzer);
		Query query = queryParser.parse("lucene");
		TopDocs topDocs = indexSearcher.search(query, 26);
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		List<Article> articleList = new ArrayList<Article>();
		for(ScoreDoc scoreDoc:scoreDocs){
			float score = scoreDoc.score;
			System.out.println(score);//相关的得分
			Document document =  indexSearcher.doc(scoreDoc.doc);
			Article article = DocumentUtils.document2Article(document);
			articleList.add(article);
		}
		
		for(Article article:articleList){
			System.out.println(article.getId());
			System.out.println(article.getTitle());
			System.out.println(article.getContent());
		}
	}
}



/**
 * 高亮
 *    * 使关键字变色
 *       *  设置
 *       *  使用
 *    * 控制摘要的大小
 */
public class HighlighterTest {
	@Test
	public void testSearchIndex() throws Exception{
		IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.directory);
		QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[]{"title","content"}, LuceneUtils.analyzer);
		Query query = queryParser.parse("Lucene");
		TopDocs topDocs = indexSearcher.search(query, 25);
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		/***********************************************************************/
			/**
			 * 给关键字加上前缀和后缀
			 */
			Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
			/**
			 * scorer封装了关键字
			 */
			Scorer scorer = new QueryScorer(query);
			Highlighter highlighter = new Highlighter(formatter,scorer);
			/**
			 * 创建一个摘要
			 */
			Fragmenter fragmenter = new SimpleFragmenter(10);
			highlighter.setTextFragmenter(fragmenter);
		/***********************************************************************/
		List<Article> articleList = new ArrayList<Article>();
		for(ScoreDoc scoreDoc:scoreDocs){
			float score = scoreDoc.score;
			System.out.println(score);//相关的得分
			Document document =  indexSearcher.doc(scoreDoc.doc);
			Article article = DocumentUtils.document2Article(document);
			/*
			 * 使用高亮器
			 */
			/**
			 * 1、分词器
			 *      查找关键词
			 * 2、字段
			 *      在哪个字段上进行高亮
			 * 3、字段的内容
			 *      把字段的内容提取出来
			 */
			String titleText = highlighter.getBestFragment(LuceneUtils.analyzer, "title", document.get("title"));
			String contentText = highlighter.getBestFragment(LuceneUtils.analyzer, "content", document.get("content"));
			if(titleText!=null){
				article.setTitle(titleText);
			}
			if(contentText!=null){
				article.setContent(contentText);
			}
			articleList.add(article);
		}
		
		for(Article article:articleList){
			System.out.println(article.getId());
			System.out.println(article.getTitle());
			System.out.println(article.getContent());
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值