`
kankan1218
  • 浏览: 277754 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Highlighter高亮

阅读更多
package com.bjsxt.indexsearch;

import jeasy.analysis.MMAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
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 org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;

import com.bjsxt.utils.File2DocumentUtil;

public class IndexAndSearch {

	/**
	 * @param args
	 */
	String filePath = "D:\\flexWorkespace\\LuceneDemo\\luceneDataSource\\小笑话_总统的房间 Room .txt";
	String indexPath = "D:\\flexWorkespace\\LuceneDemo\\indexPath";

//	Analyzer analyzer = new StandardAnalyzer();
	Analyzer analyzer = new MMAnalyzer();	

	public static void main(String[] args) throws Exception {
//		new IndexAndSearch().createIndexByDir();
		new IndexAndSearch().search("房间");
	}

	public void createIndex() throws Exception {
		// File file = new File(filePath);
		Document doc = File2DocumentUtil.file2Document(filePath);

		// IndexWriter 是用来操作(增删改)索引库的
		IndexWriter iw = new IndexWriter(indexPath, analyzer, true,
				MaxFieldLength.LIMITED);
		iw.addDocument(doc);
		iw.close();
	}
	
	public void createIndexByDir()throws Exception {
		
		//1.创建时候载入文件系统里的索引
		Directory fsDir = FSDirectory.getDirectory(indexPath);
		Directory ramDir = new RAMDirectory(fsDir);
		//new ramIndexWriter时不需要重新创建
		IndexWriter ramIndexWriter = new IndexWriter(ramDir, analyzer, MaxFieldLength.LIMITED);
		//添加document
		Document doc = File2DocumentUtil.file2Document(filePath);
		ramIndexWriter.addDocument(doc);
		ramIndexWriter.close();
		
		//2.退出时保存内存里的索引
		//new fsIndexWriter时需要重新创建,即删除原来的索引文件
		IndexWriter fsIndexWriter = new IndexWriter(fsDir, analyzer, true, MaxFieldLength.LIMITED);
//		Directory[] dir = {ramDir};
		//保存内存里的索引
		fsIndexWriter.addIndexesNoOptimize(new Directory[]{ramDir});
		//把内存里的东西提交后才优化
		fsIndexWriter.commit();
		// 优化索引文件,把多个cfs文件合并成一个 
		fsIndexWriter.optimize();
		fsIndexWriter.close();
	}
	
	public void search(String queryStr) throws Exception {
		String[] fields = { "content","name" };
		QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
		Query query = null;
		Filter filter = null;
		query = queryParser.parse(queryStr);
		IndexSearcher indexSearcher = null;
		indexSearcher = new IndexSearcher(indexPath);
		TopDocs topDocs = indexSearcher.search(query, filter, 1000);
		System.out.println("总共有" + topDocs.totalHits + "条记录:");
		for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
			int docNum = scoreDoc.doc;
			Document doc = indexSearcher.doc(docNum);
			//---------------------------准备高亮器
			Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
			Scorer scorer = new QueryScorer(query);
			Highlighter highlighter = new Highlighter(formatter,scorer);
			Fragmenter fragmenter = new SimpleFragmenter(50);
			highlighter.setTextFragmenter(fragmenter);
			//---------------------------
			
			//--------------------------高亮
			//将高亮后的结果返回,如果当前属性值中没有出现关键字,则返回空
			String hc = highlighter.getBestFragment(analyzer, "content", doc.get("content"));
			if(hc == null){
				String content = doc.get("content");
				int endIndex = Math.min(50,content.length());System.out.println(content.length());
				hc = content.substring(0,endIndex);
			}
			doc.getField("content").setValue(hc);
			//--------------------------
			
			
			File2DocumentUtil.printDocumentInfo(doc);
		}
	}
	
	public void searchByDir(String queryStr) throws Exception {
		String[] fields = { "name", "content" };
		QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
		Query query = null;
		Filter filter = null;
		query = queryParser.parse(queryStr);
		IndexSearcher indexSearcher = null;
		Directory fsDir = FSDirectory.getDirectory(indexPath);
		indexSearcher = new IndexSearcher(fsDir);
		TopDocs topDocs = indexSearcher.search(query, filter, 1000);
		System.out.println("总共有" + topDocs.totalHits + "条记录:");
		for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
			int docNum = scoreDoc.doc;
			Document doc = indexSearcher.doc(docNum);
			File2DocumentUtil.printDocumentInfo(doc);
		}
	}
}













分享到:
评论

相关推荐

    Lucene+HighLighter高亮显示实例

    《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮显示,以突出关键信息,是提升用户体验的关键因素之一。本篇文章将深入探讨...

    高亮插件效果模型高光闪烁(Unity3d)

    "高亮插件效果模型高光闪烁"是一个专门用于提升模型表面高光效果的工具,它为开发者提供了更丰富的视觉表现力,使得游戏场景中的物体能呈现出更加生动、真实的效果。这款插件主要应用于3D模型的表面,通过相机的后...

    lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

    通过以上内容,我们可以了解到在Lucene中使用IKAnalyzer进行中文分词和利用Highlighter高亮搜索结果的关键点。这两个工具对于构建一个高效的中文搜索系统至关重要,它们使得用户能够更直观、准确地获取所需信息。

    android+lucene实现全文检索并高亮关键字索引库

    我们还可以使用Highlighter高亮显示查询结果中的关键字。 6. **高亮显示**: 高亮关键字是提升用户体验的重要一环。使用Highlighter类,我们可以获取到每个匹配文档的高亮片段。首先,创建一个QueryScorer,然后...

    lucene 学习实战系列(高亮+分页)

    6. 使用Highlighter高亮搜索结果的关键片段。 7. 实现分页逻辑,根据当前页数计算offset,然后调用search方法获取下一批ScoreDoc。 8. 渲染结果,展示高亮的搜索结果和分页导航。 五、总结 Lucene的高亮显示和分页...

    VS 高亮 插件 Highlighter.zip

    《Visual Studio代码高亮插件Highlighter深度解析》 在编程世界中,代码的可读性和清晰度至关重要,尤其对于大型项目来说,良好的代码高亮能够显著提高开发效率,减少错误。Visual Studio(VS)作为一款强大的集成...

    DOM元素高亮Highlighter.js.zip

    Highlighter.js 是一个小型(纯 javascript)的库,可以让你轻松导航、选择以及高亮 DOM 元素。用法:document.addEventListener("DOMContentLoaded", function() {  var Highlighter = new window....

    Lucene 3.0.1 全文检索引擎的架构 对文件,数据库建索引,及查询(高亮显示)

    查询结果返回后,使用 Highlighter 高亮显示组件,可以将查询结果中的匹配词汇在原始文本中突出显示,使用户更容易理解搜索结果。 例如,当用户搜索“Java GUI”时,Lucene 高亮组件会在文档中找到“Java”和“GUI...

    BracketHighlighter:Sublime Text的括号和标记突出显示

    支架突出显示 括号突出显示与各种括号匹配,例如: [] , () , {} , "" , '' , &lt;tag&gt;&lt;/tag&gt;甚至自定义括号。 这最初是从pyparadigm的SublimeBrackets和SublimeTagmatcher (这两个都不再可用)中派生出来的。...

    lucene-highlighter-3.5.0.jar lucene高亮包

    lucene-highlighter-3.5.0.jar lucene高亮包

    AE脚本-文字层代码高亮突出颜色控制FUI脚本AEscripts ASH Syntax Highlighter 1.0.0

    AE脚本-文字层代码高亮突出颜色控制FUI脚本AEscripts ASH Syntax Highlighter 1.0.0AE脚本-文字层代码高亮突出颜色控制FUI脚本AEscripts ASH Syntax Highlighter 1.0.0AE脚本-文字层代码高亮突出颜色控制FUI脚本...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-24.Lucene项目实战2 共6页.pptx

    在进行文档检索时,我们使用Analyzer对内容进行分析,通过QueryScorer评估查询的相关性,并利用Highlighter高亮显示匹配的片段。此外,通过SimpleFragmenter设置每次返回的字符数,避免一次性展示大量数据,提高用户...

    Installed Packages.zip

    3. **增强编辑体验**:Multiple Cursors允许同时在多个位置编辑,AutoFileName在输入文件名时自动补全,BracketHighlighter高亮显示匹配的括号,提高编码准确性。 4. **性能优化**:SublimeCodeIntel提供了智能代码...

    Lucene实战Demo

    5. 结果处理:展示搜索结果,可使用Highlighter高亮关键词。 通过以上步骤,我们可以构建出一个基本的全文搜索引擎,满足日常的信息检索需求。对于开发者来说,理解和掌握Lucene的工作原理和使用方法,无疑将提升...

    BracketHighlighter下载

    BracketHighlighter是一款非常实用的文本编辑器插件,主要用于编程时的括号匹配高亮显示。在编程过程中,正确地配对和管理括号是至关重要的,BracketHighlighter能够帮助开发者更加直观地看到代码中的括号对,提高...

    vscode中的语法高亮和语义高亮(Syntax Highlight and Semantic Highlight)

    在 Visual Studio Code (VSCode) 中,语法高亮和语义高亮是两种增强代码可读性和美观性的关键功能。这两种高亮方式帮助开发者更好地理解代码结构和含义,从而提高编程效率。 1. **语法高亮 (Syntax Highlight)** ...

    Sublime Text 3(插件完美配置版)

    10. **其他实用工具**:如ColorPicker方便选取颜色值,BracketHighlighter高亮显示匹配的括号,Status Bar Color Picker显示当前选择的颜色。 这些插件的集成,使得Sublime Text 3成为了一款强大的Web开发环境。...

    Sublime Text Build 3176 x64.rar

    - **常见插件举例**:如GitGutter显示版本控制差异,SideBarEnhancements增强侧边栏功能,Emmet加速HTML和CSS编写,ColorPicker快速选取颜色,BracketHighlighter高亮括号匹配等。 3. **自定义皮肤和字体** - **...

    lucene-highlighter-3.4.0.jar

    《Lucene Highlighter 3.4.0:搜索引擎中的文本高亮工具》 在信息爆炸的时代,搜索引擎成为了我们获取知识的重要途径。Apache Lucene,作为一款高性能、全文本搜索库,为开发者提供了强大的搜索功能。其中,Lucene ...

    一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter

    8. **生成高亮片段**: 使用Highlighter的`getBestFragments`方法,传入Query、Analyzer、FieldTermVector信息以及需要高亮的文本,得到高亮的片段。 **五、实例代码** ```java // 创建Analyzer Analyzer analyzer =...

Global site tag (gtag.js) - Google Analytics