`

java的搜索引擎之Lucene的创建和搜索高亮

 
阅读更多
TermQuery 关键字查询;
RangeQuery 范围查询;
WildcardQuery 通配符查询;
PhraseQuery 短语查询;
booleanQuery boolean查询;
 package cn.mmclbs.com;

import java.io.File;

import jeasy.analysis.MMAnalyzer;
import org.apache.lucene.analysis.Analyzer;
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.junit.Test;
/**
 * Lucene搜索引擎类
 * @author Administrator
 *
 */
public class Lucenes
{
	//来源路径
	private static String path = "F:\\deng\\Lucene\\datasource\\IndexWriter addDocument's a javadoc .txt";
	//索引路径
	private static String indexPath = "F:\\deng\\Lucene\\luceneIndexs";
	//中文分词器
	Analyzer analyzer = new MMAnalyzer();
	/**
	 * 创建索引
	 * @throws Exception
	 */
	@Test
	public void IndexTest() throws Exception
	{
		//得到一个File对象
		File file = new File(path);
		//转换成Document对象
		Document doc = DocumentAndStringUtil.getString2Docuement(file);
		//创建索引对象并分词设置最大字段
		IndexWriter index = new IndexWriter(indexPath,analyzer,true,MaxFieldLength.LIMITED);
		index.addDocument(doc);
		index.commit(); //涮新提交到硬盘上
		index.close();//关闭索引对象
	}
	/**
	 * 搜索引擎
	 * @throws Exception
	 */
	@Test
	public void SearchTest() throws Exception
	{
		//搜索内容
		String queryString = "高德";
		//搜索对象的字段
		String[] field = {"content"};
		
		//搜索的目标对象
		QueryParser queryParser = new MultiFieldQueryParser(field,analyzer);
		Query query = queryParser.parse(queryString);
		
		//搜索的对象
		IndexSearcher search = new IndexSearcher(indexPath);
		Filter filter = null;
		//返回集合
		TopDocs topDocs = search.search(query,filter,10000);
		//一共查出来多少条
		System.out.println("一共搜索出["+ topDocs.totalHits +"]条记录");
		
		//循环出搜索出来的集合
		for(ScoreDoc scoreDoc:topDocs.scoreDocs)
		{
			//内部文档是有编号的。这个是文档编辑
			int docSn = scoreDoc.doc;
			//每一条Document对象记录
			Document doc = search.doc(docSn);//这个是编号
			DocumentAndStringUtil.getDocumentoString(doc,analyzer,query);
		}
	}
}

 

 

 

工具类:

package cn.mmclbs.com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;

/**
 * 转换工具类
 * @author Administrator
 *
 */
public class DocumentAndStringUtil
{

	/**
	 * String转换Document
	 * @param file 返回的文件
	 * @return
	 * @throws Exception
	 */
	public static Document getString2Docuement(File file) throws Exception
	{
		Document doc = new Document();
		doc.add(new Field("name",file.getName(),Store.YES,Index.ANALYZED));
		doc.add(new Field("content",readFile(file),Store.YES,Index.ANALYZED));
		doc.add(new Field("size",String.valueOf(file.length()),Store.YES,Index.NOT_ANALYZED));
		doc.add(new Field("url",file.getAbsolutePath(),Store.YES,Index.NO));
		return doc;
	}

	/**
	 * 读取File文件转换成String
	 * @param file 文件对象
	 * @return
	 * @throws Exception
	 */
	private static String readFile(File file) throws Exception
	{
		InputStream inStream = new FileInputStream(file);
		Reader reader = new InputStreamReader(inStream); 
		BufferedReader br = new BufferedReader(reader);
		StringBuffer buffer = new StringBuffer();
		String tempStr = null;
		while((tempStr = br.readLine()) != null)
		{
			buffer.append(tempStr+"\n");
		}
		return buffer.toString();
	}
	/**
	 * Document转换成String
	 * @param doc 对象
	 * @param analyzer 分词器
	 * @param query 查询对象
	 * @return
	 * @throws Exception
	 */
	public static void getDocumentoString(Document doc, Analyzer analyzer,Query query) throws Exception
	{
		System.out.println("名称:"+doc.get("name"));
		System.out.println("内容:"+getHighLight(doc,analyzer,query,"content"));
		System.out.println("大小:"+doc.get("size"));
		System.out.println("地址:"+doc.get("url"));
	}
	/**
	 * 高亮
	 * @param doc 对象
	 * @param analyzer 分词器
	 * @param query 查询对象
	 * @param field 查询的内容
	 * @return
	 * @throws Exception
	 */
	public static String getHighLight(Document doc, Analyzer analyzer, Query query, String field) throws Exception
	{
		SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b>", "</b>");
		/* 语法高亮显示设置 */
		Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
		highlighter.setTextFragmenter(new SimpleFragmenter(100));
		// 取 field 字段值,准备进行高亮
		String fieldValue = doc.get(field);
		TokenStream tokenStream = analyzer.tokenStream(field, new StringReader(fieldValue));
		// 转成高亮的值
		String highLightFieldValue = highlighter.getBestFragment(tokenStream, fieldValue);
		if (highLightFieldValue == null)
			highLightFieldValue = fieldValue;
		return highLightFieldValue;
	}
}


 

 

分享到:
评论

相关推荐

    我封装的搜索引擎之lucene篇

    标题 "我封装的搜索引擎之lucene篇" 暗示了这个压缩包文件包含与Lucene搜索引擎相关的代码或文档。Lucene是Apache软件基金会的开源全文检索库,它提供了高级的文本分析和索引功能,使得开发者能够轻松地在应用程序中...

    开发自己的搜索引擎 lucene + heritrix

    首先,Lucene 是一个基于 Java 的开源信息检索库,它为开发者提供了一系列用于构建搜索引擎的工具和接口。Lucene 的主要优势在于其强大的搜索能力、高效率、灵活性以及易于集成等特点。它支持全文索引和搜索,并能够...

    java结合lucene做的的搜索引擎

    是使用java+lucene+jsp开发的搜索引擎。其中包括排序,高亮显示,以及分页等功能。效果类似百度,很炫。

    lucene 高亮显示. java

    通过上述方法,不仅能够保持Lucene高亮显示功能的准确性,还能在处理中文分词时显著提升系统性能,特别是对于大数据量和高并发场景下的应用,这种优化显得尤为重要。Lucene的TermVector特性,配合合理的代码实现,为...

    解密搜索引擎技术实战:Lucene in java(第2版)源码 dvd ppt

    《解密搜索引擎技术实战:Lucene in java(第2版)源码 dvd ppt》是一部深入探讨搜索引擎技术的著作,特别关注于使用Java实现的开源全文搜索引擎库——Lucene。本书结合了理论与实践,旨在帮助读者理解搜索引擎的...

    SpringBoot+Lucene搜索结果高亮显示Demo

    这个SpringBoot+Lucene的Demo为开发者提供了一个起点,可以在此基础上进一步扩展,比如增加对多字段的索引和搜索、支持多种类型的文档、优化查询性能等。通过熟练掌握这些知识,你可以构建出更加强大的全文搜索引擎...

    Java搜索工具——Lucene实例总结(一)

    Java搜索工具——Lucene实例总结(一) 在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握...

    基于java的搜索引擎 Lucene.zip

    **Java Lucene 搜索引擎详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,主要用于构建高性能、可扩展的信息检索应用。它提供了完整的搜索功能,包括索引、查询解析、排序、高亮显示结果等。本...

    lucene 多字段查询+文字高亮显示

    在IT领域,Lucene是一个非常重要的全文搜索引擎库,它由Apache软件基金会开发并维护。Lucene提供了高效的文本分析、索引和搜索功能,是许多大型网站和应用的基础。本话题聚焦于“Lucene多字段查询”和“文字高亮显示...

    Lucene搜索引擎

    **Lucene搜索引擎** Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库,为Java开发者提供了全文检索的API。Lucene的核心功能包括文档的索引、搜索以及结果的相关度排序。通过使用Lucene,...

    java实现lucene高亮显示Html,直接测试就可以用

    在Java编程语言中,Lucene是一个非常强大的全文搜索引擎库,它允许开发者在应用程序中实现高效、复杂的搜索功能。本文将详细介绍如何使用Java和Lucene来实现HTML文本的高亮显示,以便用户在搜索结果中能快速识别...

    搜索引擎 Lucene PPT 教程

    **搜索引擎 Lucene PPT 教程** Lucene是一款开源全文搜索引擎库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的搜索功能。本教程旨在通过PPT的形式,深入浅出地讲解Lucene的...

    人工智能-项目实践-搜索引擎-搜索引擎+高亮搜索+不高亮搜索

    Lucene是一个流行的Java全文搜索引擎库,可以创建倒排索引,这是一种高效的搜索结构,将单词映射到包含它们的文档。 4. 查询处理:用户输入查询后,搜索引擎需要理解查询意图并生成匹配的文档列表。这涉及到查询...

    整合Lucene搜索用户新闻项目实例,支持搜索关键词高亮

    总之,这个项目实例涵盖了从数据库获取新闻数据,使用Lucene进行文本处理、索引构建、搜索执行,到最后的关键词高亮显示等一系列步骤,全面展示了如何在Java项目中有效利用Lucene实现全文搜索引擎。通过学习和实践...

    基于Lucene的搜索引擎

    这个课程设计创建了一个简单的搜索引擎,适合初学者了解和学习如何使用Lucene。 首先,我们要理解搜索引擎的基本工作原理。搜索引擎主要由以下几个核心组件构成: 1. **索引**:搜索引擎通过爬取网页(在本项目中...

    lucene搜索引擎配置详解

    本文将深入探讨Lucene搜索引擎的配置过程,包括文件加载、索引创建和搜索操作,帮助你理解其核心技术。 ### 文件加载 在Lucene中,首先需要将待搜索的数据加载到内存或磁盘上的某个结构中。这通常涉及到读取各种...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    在构建一个简单的新闻网站搜索引擎时,SSH(Spring、Struts2和Hibernate)是一个常见的Java Web开发框架组合,而Lucene是Apache开源组织提供的一款强大的全文搜索引擎库。本项目结合了这些技术,实现了分页、排序和...

    基于Java的实例源码-搜索引擎 Lucene.zip

    这个"基于Java的实例源码-搜索引擎 Lucene.zip"包含了一个使用Java编写的Lucene搜索引擎的实例代码,版本为3.6.1。这个压缩包可以帮助我们深入了解Lucene的工作原理以及如何在实际项目中应用。 Lucene的核心概念...

    基于struts2实现的lucene搜索引擎

    【基于Struts2实现的Lucene搜索引擎】是一个典型的Java Web应用程序,它整合了Apache的Lucene库,用于在Web环境中构建高效、可扩展的全文检索功能。Lucene是Java领域中广泛使用的开源全文检索库,提供了强大的文本...

    jsp+servlet+jdbc+lucene 搜索引擎

    Lucene支持高效的全文检索,具备分词、模糊匹配、高亮显示等功能,极大地提高了搜索引擎的性能。 **项目结构与功能** 1. **初始化索引**:在项目启动时,系统可能需要从数据库或其他数据源加载数据,使用Lucene...

Global site tag (gtag.js) - Google Analytics