- 浏览: 851713 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
试过lucene最新版跟paoding2.0版不兼容,被迫换lucene2.9,研究继续。。。。。。
将整合要用到的jar包加入工程,附件中有。
添加环境变量PAODING_DIC_HOME E:\paoding-analysis\dic【dic位置即paoding-analysis-2.0.4-beta.zip得解压位置】
在paoding-dic-home.properties文件下面添加:
#paoding.dic.home=dic
paoding.dic.home=E:/paoding-analysis/dic
paoding-knives.properties文件
paoding.knife.class.letterKnife=net.paoding.analysis.knife.LetterKnife
paoding.knife.class.numberKnife=net.paoding.analysis.knife.NumberKnife
paoding.knife.class.cjkKnife=net.paoding.analysis.knife.CJKKnife
这两个文件加入工程src根目录即可。
附上例子:
将整合要用到的jar包加入工程,附件中有。
添加环境变量PAODING_DIC_HOME E:\paoding-analysis\dic【dic位置即paoding-analysis-2.0.4-beta.zip得解压位置】
在paoding-dic-home.properties文件下面添加:
#paoding.dic.home=dic
paoding.dic.home=E:/paoding-analysis/dic
paoding-knives.properties文件
paoding.knife.class.letterKnife=net.paoding.analysis.knife.LetterKnife
paoding.knife.class.numberKnife=net.paoding.analysis.knife.NumberKnife
paoding.knife.class.cjkKnife=net.paoding.analysis.knife.CJKKnife
这两个文件加入工程src根目录即可。
附上例子:
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- 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.index.IndexReader;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.TermPositionVector;
- import org.apache.lucene.queryParser.ParseException;
- import org.apache.lucene.queryParser.QueryParser;
- import org.apache.lucene.search.Hits;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.search.Searcher;
- 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;
- import org.apache.lucene.search.highlight.TokenSources;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.FSDirectory;
- @SuppressWarnings("deprecation")
- public class LuceneChinese {
- // 数据文件夹
- private static final String DATA_DIR = "E:\\test\\file";
- // 索引存放文件夹
- private static final String INDEX_DIR = "E:\\test\\index";
- // 字段
- private static final String FIELD_NAME = "content";
- public static void main(String[] args) throws Exception {
- createIndex();
- search("");
- }
- /**
- * 创建索引
- */
- public static void createIndex() {
- System.out.println("-------------------建立索引开始-----------------------");
- long timeStart = System.currentTimeMillis();
- try {
- // PaodingChineseAnalyzer实现Analyzer接口,继承PaodingAnalyze,重写tokenizer方法,实现过滤分词
- Analyzer analyzer = new PaodingChineseAnalyzer(new File(
- "E:\\stopwords.txt"));
- IndexWriter writer = new IndexWriter(FSDirectory.open(new File(
- INDEX_DIR)), analyzer, true,
- IndexWriter.MaxFieldLength.LIMITED);
- // 根据指定的目录把该目录下所有txt文件索引起来
- indexDoc(writer, new File(DATA_DIR));
- // 优化, 可以提高搜索速度。
- writer.optimize();
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- long timeEnd = System.currentTimeMillis();
- System.out.println("-------------------建立索引耗时: "
- + (timeEnd - timeStart) + " 毫秒-----------------------");
- }
- /**
- * 搜索
- *
- * @param keyword
- * @throws IOException
- * @throws ParseException
- */
- public static void search(String queryString) throws IOException,
- ParseException {
- // 输入搜索关键字
- if (queryString == null || queryString == "") {
- System.out.print("Search for:");
- InputStreamReader in = new InputStreamReader(System.in);
- BufferedReader reader = new BufferedReader(in);
- queryString = reader.readLine();
- if (queryString == "") {
- System.exit(0);
- }
- }
- long timeStart = System.currentTimeMillis();
- // 读取索引文件
- Directory directory = FSDirectory.open(new File(INDEX_DIR));
- // PaodingChineseAnalyzer实现Analyzer接口,继承PaodingAnalyzer
- Analyzer analyzer = new PaodingChineseAnalyzer();
- IndexReader reader = IndexReader.open(directory, true);
- QueryParser parser = new QueryParser(FIELD_NAME, analyzer);
- Query query = parser.parse(queryString);
- // 创建索引查询器
- Searcher searcher = new IndexSearcher(directory);
- query = query.rewrite(reader);
- Hits hits = searcher.search(query);
- // 高亮显示标签,默认是<b></b>
- // BoldFormatter formatter = new BoldFormatter();
- SimpleHTMLFormatter shf = new
- SimpleHTMLFormatter("<span style=\"color:red\">",
- "</span>");
- // 构造高亮器,指定高亮的格式,指定查询计分器
- Highlighter highlighter = new Highlighter(shf, new QueryScorer(
- query));
- // 设置块划分器
- highlighter.setTextFragmenter(new SimpleFragmenter(50));
- System.out.println("共搜索到: " + hits.length() + " 条资源");
- for (int i = 0; i < hits.length(); i++) {
- String text = hits.doc(i).get(FIELD_NAME);
- String path = hits.doc(i).get("path");
- int maxNumFragmentsRequired = 5;
- String fragmentSeparator = "...";
- TermPositionVector tpv = (TermPositionVector) reader
- .getTermFreqVector(hits.id(i), FIELD_NAME);
- TokenStream tokenStream = TokenSources.getTokenStream(tpv);
- String result = highlighter.getBestFragments(tokenStream, text,
- maxNumFragmentsRequired, fragmentSeparator);
- System.out.println("\n文件路径:" + path);
- System.out.println("\n" + result);
- }
- reader.close();
- System.out.println("共搜索到: " + hits.length() + " 条资源");
- long timeEnd = System.currentTimeMillis();
- System.out.println("-------------------查询耗时: " + (timeEnd - timeStart)
- + " 毫秒-----------------------");
- }
- /**
- * 对指定的目录进行索引
- *
- * @param writer
- * IndexWriter
- * @param root
- * 指定的目录
- */
- private static void indexDoc(IndexWriter writer, File root) {
- // 不去索引不能读的文件
- if (root.canRead()) {
- if (root.isDirectory()) {
- File[] files = root.listFiles();
- if (files.length != 0) {
- for (int i = 0; i < files.length; i++) {
- // 递归调用
- indexDoc(writer, files[i]);
- }
- }
- } else {
- try {
- // 文件的文本内容
- InputStream in = new FileInputStream(root);
- byte b[] = new byte[in.available()];
- in.read(b);
- String content = new String(b, "GBK");
- // 创建一个lucene document
- Document d = new Document();
- // 把文件的文本内容添加进来 进行索引,保存
- d.add(new Field(FIELD_NAME, content, Field.Store.YES,
- Field.Index.TOKENIZED,
- Field.TermVector.WITH_POSITIONS_OFFSETS));
- // 同时把path也加入进来,只存储,不索引
- d.add(new Field("path", root.getAbsolutePath(),
- Field.Store.YES, Field.Index.NOT_ANALYZED));
- // 把document写入索引文件
- writer.addDocument(d);
- System.out.println("add file: " + root.getAbsolutePath());
- } catch (FileNotFoundException e) {
- System.out.println("file not found, ignored.");
- e.printStackTrace();
- } catch (IOException e) {
- }
- }
- }
- }
- }
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; 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.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.TermPositionVector; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.Searcher; 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; import org.apache.lucene.search.highlight.TokenSources; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; @SuppressWarnings("deprecation") public class LuceneChinese { // 数据文件夹 private static final String DATA_DIR = "E:\\test\\file"; // 索引存放文件夹 private static final String INDEX_DIR = "E:\\test\\index"; // 字段 private static final String FIELD_NAME = "content"; public static void main(String[] args) throws Exception { createIndex(); search(""); } /** * 创建索引 */ public static void createIndex() { System.out.println("-------------------建立索引开始-----------------------"); long timeStart = System.currentTimeMillis(); try { // PaodingChineseAnalyzer实现Analyzer接口,继承PaodingAnalyze,重写tokenizer方法,实现过滤分词 Analyzer analyzer = new PaodingChineseAnalyzer(new File( "E:\\stopwords.txt")); IndexWriter writer = new IndexWriter(FSDirectory.open(new File( INDEX_DIR)), analyzer, true, IndexWriter.MaxFieldLength.LIMITED); // 根据指定的目录把该目录下所有txt文件索引起来 indexDoc(writer, new File(DATA_DIR)); // 优化, 可以提高搜索速度。 writer.optimize(); writer.close(); } catch (IOException e) { e.printStackTrace(); } long timeEnd = System.currentTimeMillis(); System.out.println("-------------------建立索引耗时: " + (timeEnd - timeStart) + " 毫秒-----------------------"); } /** * 搜索 * * @param keyword * @throws IOException * @throws ParseException */ public static void search(String queryString) throws IOException, ParseException { // 输入搜索关键字 if (queryString == null || queryString == "") { System.out.print("Search for:"); InputStreamReader in = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(in); queryString = reader.readLine(); if (queryString == "") { System.exit(0); } } long timeStart = System.currentTimeMillis(); // 读取索引文件 Directory directory = FSDirectory.open(new File(INDEX_DIR)); // PaodingChineseAnalyzer实现Analyzer接口,继承PaodingAnalyzer Analyzer analyzer = new PaodingChineseAnalyzer(); IndexReader reader = IndexReader.open(directory, true); QueryParser parser = new QueryParser(FIELD_NAME, analyzer); Query query = parser.parse(queryString); // 创建索引查询器 Searcher searcher = new IndexSearcher(directory); query = query.rewrite(reader); Hits hits = searcher.search(query); // 高亮显示标签,默认是<b></b> // BoldFormatter formatter = new BoldFormatter(); SimpleHTMLFormatter shf = new SimpleHTMLFormatter("<span style=\"color:red\">", "</span>"); // 构造高亮器,指定高亮的格式,指定查询计分器 Highlighter highlighter = new Highlighter(shf, new QueryScorer( query)); // 设置块划分器 highlighter.setTextFragmenter(new SimpleFragmenter(50)); System.out.println("共搜索到: " + hits.length() + " 条资源"); for (int i = 0; i < hits.length(); i++) { String text = hits.doc(i).get(FIELD_NAME); String path = hits.doc(i).get("path"); int maxNumFragmentsRequired = 5; String fragmentSeparator = "..."; TermPositionVector tpv = (TermPositionVector) reader .getTermFreqVector(hits.id(i), FIELD_NAME); TokenStream tokenStream = TokenSources.getTokenStream(tpv); String result = highlighter.getBestFragments(tokenStream, text, maxNumFragmentsRequired, fragmentSeparator); System.out.println("\n文件路径:" + path); System.out.println("\n" + result); } reader.close(); System.out.println("共搜索到: " + hits.length() + " 条资源"); long timeEnd = System.currentTimeMillis(); System.out.println("-------------------查询耗时: " + (timeEnd - timeStart) + " 毫秒-----------------------"); } /** * 对指定的目录进行索引 * * @param writer * IndexWriter * @param root * 指定的目录 */ private static void indexDoc(IndexWriter writer, File root) { // 不去索引不能读的文件 if (root.canRead()) { if (root.isDirectory()) { File[] files = root.listFiles(); if (files.length != 0) { for (int i = 0; i < files.length; i++) { // 递归调用 indexDoc(writer, files[i]); } } } else { try { // 文件的文本内容 InputStream in = new FileInputStream(root); byte b[] = new byte[in.available()]; in.read(b); String content = new String(b, "GBK"); // 创建一个lucene document Document d = new Document(); // 把文件的文本内容添加进来 进行索引,保存 d.add(new Field(FIELD_NAME, content, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); // 同时把path也加入进来,只存储,不索引 d.add(new Field("path", root.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 把document写入索引文件 writer.addDocument(d); System.out.println("add file: " + root.getAbsolutePath()); } catch (FileNotFoundException e) { System.out.println("file not found, ignored."); e.printStackTrace(); } catch (IOException e) { } } } } }
- import java.io.File;
- import java.io.Reader;
- import java.util.Set;
- import net.paoding.analysis.analyzer.PaodingAnalyzer;
- import net.paoding.analysis.analyzer.PaodingTokenizer;
- import org.apache.lucene.analysis.LowerCaseFilter;
- import org.apache.lucene.analysis.StopFilter;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.analysis.WordlistLoader;
- public class PaodingChineseAnalyzer extends PaodingAnalyzer {
- private static String[] stopWords = {
- "www", "的", "和", "与", "时", "在",
- "是", "被", "所", "那", "这", "有",
- "将", "会", "为", "对", "了", "过",
- "去" };
- @SuppressWarnings("unchecked")
- private Set stopSet;
- public PaodingChineseAnalyzer() {
- stopSet = StopFilter.makeStopSet(stopWords);
- }
- public PaodingChineseAnalyzer(String[] stopWords) {
- stopSet = StopFilter.makeStopSet(stopWords);
- }
- // 读取外部stopwords文件
- public PaodingChineseAnalyzer(File stopwordsFile) {
- try {
- stopSet = WordlistLoader.getWordSet(stopwordsFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 过滤分词
- @SuppressWarnings("deprecation")
- public final TokenStream tokenStream(String fieldName, Reader reader) {
- TokenStream result = new PaodingTokenizer(reader, getKnife(),
- createTokenCollector());
- // 加入过滤分词方法,lucene也提供了很多过滤分词方法,可以选择使用
- result = new StopFilter(result, stopSet);
- result = new LowerCaseFilter(result);
- return result;
- }
- }
import java.io.File; import java.io.Reader; import java.util.Set; import net.paoding.analysis.analyzer.PaodingAnalyzer; import net.paoding.analysis.analyzer.PaodingTokenizer; import org.apache.lucene.analysis.LowerCaseFilter; import org.apache.lucene.analysis.StopFilter; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.WordlistLoader; public class PaodingChineseAnalyzer extends PaodingAnalyzer { private static String[] stopWords = { "www", "的", "和", "与", "时", "在", "是", "被", "所", "那", "这", "有", "将", "会", "为", "对", "了", "过", "去" }; @SuppressWarnings("unchecked") private Set stopSet; public PaodingChineseAnalyzer() { stopSet = StopFilter.makeStopSet(stopWords); } public PaodingChineseAnalyzer(String[] stopWords) { stopSet = StopFilter.makeStopSet(stopWords); } // 读取外部stopwords文件 public PaodingChineseAnalyzer(File stopwordsFile) { try { stopSet = WordlistLoader.getWordSet(stopwordsFile); } catch (Exception e) { e.printStackTrace(); } } // 过滤分词 @SuppressWarnings("deprecation") public final TokenStream tokenStream(String fieldName, Reader reader) { TokenStream result = new PaodingTokenizer(reader, getKnife(), createTokenCollector()); // 加入过滤分词方法,lucene也提供了很多过滤分词方法,可以选择使用 result = new StopFilter(result, stopSet); result = new LowerCaseFilter(result); return result; } }
- commons-logging.jar (37.1 KB)
- 下载次数: 31
- lucene-highlighter-2.2.0.jar (27.8 KB)
- 下载次数: 45
- paoding-analysis.jar (122.6 KB)
- 下载次数: 50
- lucene-core-2.9.1.jar (1.1 MB)
- 下载次数: 59
- stopwords.rar (3.1 KB)
- 下载次数: 52
- paoding-analysis-2.0.4-beta.zip (5.8 MB)
- 下载次数: 57
发表评论
-
Solr4.0+IKAnalyzer中文分词安装
2012-11-29 19:14 1584有近2年没接触Solr跟Lucene ... -
solr搜索打分规制排序
2012-09-26 21:58 2407solr使用了Lucene的内核,也继承了Luce ... -
solr DataimportHanler
2012-09-22 17:01 1247大多数的应用程序将数据存储在关系数据库、xml文件 ... -
solr第一弹 autocomplete(自动补全)
2012-09-22 16:38 1466百度和google中都有 ... -
全文搜索服务器solr之客户端 - solrj二次开发
2012-09-21 09:07 4864Solrj已经是很强大的solr客户端了。它本身就包装了h ... -
Solr Data Import 快速入门
2012-09-20 14:32 835原文出处:http://blog.chenl ... -
JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误
2012-09-20 11:36 1793问题一:出现控制台坏的响应错误一Bad reque ... -
Solr学习总结
2012-09-20 10:06 6440一、 SOLR搭建企业搜索平台 运行环境: 运行容器:Tomc ... -
olr 的客户端调用solrj 建索引+分页查询
2012-09-20 08:54 1936在 solr 3.5 配置及应用(一) 讲过一了 sol ... -
Solr笔记
2012-09-19 23:07 1292... -
Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)
2012-09-19 22:56 1770Apache Solr 介绍 Solr 是 ... -
lucene3.0 分页显示与高亮显示(转)
2012-09-19 11:44 1729分页类 Java代码 pac ... -
lucene3 中文IKAnalyzer分词例子
2012-09-10 13:37 1183import java.io.IOException; im ... -
Lucene3.0.1 学习笔记
2012-09-08 08:57 955不管怎么说,搜索都是非 ... -
Compass2.0.2自带例子解析
2012-09-05 08:47 1467Compass2.0.2自带例子解析: 下面的代码来自com ... -
compass站内搜索
2012-09-05 08:49 1002compass站内搜索: 1.去官方网站下载compass的 ... -
Spring + Compass + paoding配置
2012-09-05 08:50 1056Spring + Compass + paoding配置: ... -
配置compass的索引位置为相对路径
2012-09-01 10:49 1369配置compass的索引位置为相对路径: Compass是对 ... -
lucene创建索引
2012-09-01 10:48 1091lucene创建索引: import java.io.Fi ... -
Lucene demo调试运行:
2012-09-01 10:47 2030Lucene demo调试运行: 运行环境: JDK ...
相关推荐
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
在与Lucene3.0的整合中,Paoding-Analysis能够帮助Lucene更好地理解中文文档,从而提高搜索的精确性和召回率。 在使用Paoding-Analysis时,需要注意与Spring框架的兼容问题。Spring作为一个流行的轻量级应用框架,...
支持lucene3.0以上版本的分词器paoding的jar包还没有出来,只有源代码。我通过将源代码打包得到此jar.并且测试过。可以和当前最新版本的lucene3.6整合
lucene 3.0 API中文帮助,学习的人懂得的
在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z at org.apache.lucene.index....
【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...
通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分利用其强大功能。这本书是深入研究和应用Lucene不可或缺的...
lucene3.0 中文分词器, 庖丁解牛
这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...
实例是一个java实例,可直接导入到MyEclipse中使用。 其中是lucene3.0整合了庖丁解牛分词法,添加了...因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法整合问题
**Lucene 3.0 全文信息检索** Lucene 是一个由Apache软件基金会4 Jakarta项目组开发的开源全文检索引擎工具包。自1999年发布以来,Lucene 已经发展成为Java世界中最为广泛使用的全文检索库,为开发者提供了构建高...
**正文** Lucene是一个开源全文检索库,由Apache软件基金会开发。它提供了强大的文本分析、索引和搜索功能,广泛应用于各种信息检索系统...通过深入学习和应用Lucene3.0,开发者可以构建出高效、智能的信息检索系统。
在 Lucene 3.0 版本中,虽然已经相对较旧,但仍然包含了基本的搜索引擎功能,适用于简单或特定场景的搜索需求。在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 ...
《深入剖析Lucene3.0:庖丁解牛与索引搜索实践》 在IT行业中,搜索引擎技术扮演着至关重要的角色,而Lucene作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene3.0版本,结合“庖丁解...
**正文** Lucene是一个强大的全文检索库,由Apache软件基金会开发并维护,广泛应用于各种搜索引擎...通过学习和实践,开发者可以利用Lucene 3.0的强大功能,构建出高效、灵活的全文搜索引擎,满足各种应用场景的需求。
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的