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是Apache软件基金会的开源全文检索库,它提供了高级的文本分析和索引功能,使得开发者能够轻松地在应用程序中...
首先,Lucene 是一个基于 Java 的开源信息检索库,它为开发者提供了一系列用于构建搜索引擎的工具和接口。Lucene 的主要优势在于其强大的搜索能力、高效率、灵活性以及易于集成等特点。它支持全文索引和搜索,并能够...
是使用java+lucene+jsp开发的搜索引擎。其中包括排序,高亮显示,以及分页等功能。效果类似百度,很炫。
通过上述方法,不仅能够保持Lucene高亮显示功能的准确性,还能在处理中文分词时显著提升系统性能,特别是对于大数据量和高并发场景下的应用,这种优化显得尤为重要。Lucene的TermVector特性,配合合理的代码实现,为...
《解密搜索引擎技术实战:Lucene in java(第2版)源码 dvd ppt》是一部深入探讨搜索引擎技术的著作,特别关注于使用Java实现的开源全文搜索引擎库——Lucene。本书结合了理论与实践,旨在帮助读者理解搜索引擎的...
这个SpringBoot+Lucene的Demo为开发者提供了一个起点,可以在此基础上进一步扩展,比如增加对多字段的索引和搜索、支持多种类型的文档、优化查询性能等。通过熟练掌握这些知识,你可以构建出更加强大的全文搜索引擎...
Java搜索工具——Lucene实例总结(一) 在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握...
**Java Lucene 搜索引擎详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发,主要用于构建高性能、可扩展的信息检索应用。它提供了完整的搜索功能,包括索引、查询解析、排序、高亮显示结果等。本...
在IT领域,Lucene是一个非常重要的全文搜索引擎库,它由Apache软件基金会开发并维护。Lucene提供了高效的文本分析、索引和搜索功能,是许多大型网站和应用的基础。本话题聚焦于“Lucene多字段查询”和“文字高亮显示...
**Lucene搜索引擎** Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库,为Java开发者提供了全文检索的API。Lucene的核心功能包括文档的索引、搜索以及结果的相关度排序。通过使用Lucene,...
在Java编程语言中,Lucene是一个非常强大的全文搜索引擎库,它允许开发者在应用程序中实现高效、复杂的搜索功能。本文将详细介绍如何使用Java和Lucene来实现HTML文本的高亮显示,以便用户在搜索结果中能快速识别...
**搜索引擎 Lucene PPT 教程** Lucene是一款开源全文搜索引擎库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的搜索功能。本教程旨在通过PPT的形式,深入浅出地讲解Lucene的...
Lucene是一个流行的Java全文搜索引擎库,可以创建倒排索引,这是一种高效的搜索结构,将单词映射到包含它们的文档。 4. 查询处理:用户输入查询后,搜索引擎需要理解查询意图并生成匹配的文档列表。这涉及到查询...
总之,这个项目实例涵盖了从数据库获取新闻数据,使用Lucene进行文本处理、索引构建、搜索执行,到最后的关键词高亮显示等一系列步骤,全面展示了如何在Java项目中有效利用Lucene实现全文搜索引擎。通过学习和实践...
这个课程设计创建了一个简单的搜索引擎,适合初学者了解和学习如何使用Lucene。 首先,我们要理解搜索引擎的基本工作原理。搜索引擎主要由以下几个核心组件构成: 1. **索引**:搜索引擎通过爬取网页(在本项目中...
本文将深入探讨Lucene搜索引擎的配置过程,包括文件加载、索引创建和搜索操作,帮助你理解其核心技术。 ### 文件加载 在Lucene中,首先需要将待搜索的数据加载到内存或磁盘上的某个结构中。这通常涉及到读取各种...
在构建一个简单的新闻网站搜索引擎时,SSH(Spring、Struts2和Hibernate)是一个常见的Java Web开发框架组合,而Lucene是Apache开源组织提供的一款强大的全文搜索引擎库。本项目结合了这些技术,实现了分页、排序和...
这个"基于Java的实例源码-搜索引擎 Lucene.zip"包含了一个使用Java编写的Lucene搜索引擎的实例代码,版本为3.6.1。这个压缩包可以帮助我们深入了解Lucene的工作原理以及如何在实际项目中应用。 Lucene的核心概念...
【基于Struts2实现的Lucene搜索引擎】是一个典型的Java Web应用程序,它整合了Apache的Lucene库,用于在Web环境中构建高效、可扩展的全文检索功能。Lucene是Java领域中广泛使用的开源全文检索库,提供了强大的文本...
Lucene支持高效的全文检索,具备分词、模糊匹配、高亮显示等功能,极大地提高了搜索引擎的性能。 **项目结构与功能** 1. **初始化索引**:在项目启动时,系统可能需要从数据库或其他数据源加载数据,使用Lucene...