import java.io.IOException;
import java.util.Arrays;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
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.CorruptIndexException;
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.TokenSources;
import org.apache.lucene.store.LockObtainFailedException;
public class test {
public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException, ParseException {
String IDNEX_PATH = "c:/temp/pao";
//获取Paoding中文分词器
Analyzer analyzer = new PaodingAnalyzer();
//建立索引
IndexWriter writer = new IndexWriter(IDNEX_PATH, analyzer, true);
Document doc = new Document();
Field field = new Field("content", "你好,世界!维护世界和平", Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
Field field2 = new Field("content2", "我要毁灭世界", Field.Store.YES,
Field.Index.TOKENIZED);
doc.add(field);
doc.add(field2);
Document doc2 = new Document();
Field field3 = new Field("content", "我要得到世界上最好的蛋糕", Field.Store.YES,
Field.Index.TOKENIZED);
Field field4 = new Field("content2", "蛋糕我最喜欢吃的", Field.Store.YES,
Field.Index.TOKENIZED);
doc2.add(field3);
doc2.add(field4);
writer.addDocument(doc);
writer.addDocument(doc2);
writer.close();
System.out.println("Indexed success!");
//检索
IndexReader reader = IndexReader.open(IDNEX_PATH);
QueryParser parser = new QueryParser("content2", analyzer);
Query query = parser.parse("我要毁灭世界");
Searcher searcher = new IndexSearcher(reader);
// String key[] = {"世界" , "我要"};
// String searchField[] = {"content", "content"};
// BooleanClause.Occur[] flags = {BooleanClause.Occur.MUST, BooleanClause.Occur.MUST_NOT};
// Query multiQuery = MultiFieldQueryParser.parse(key, searchField, flags, analyzer);
Hits hits = searcher.search(query);
if (hits.length() == 0) {
System.out.println("hits.length=0");
}
for(int i = 0, j =hits.length();i < j;i++){
Document readDoc = hits.doc(i);
//高亮处理
String text = readDoc.get("content2");
String t2[] = readDoc.getValues("content");
System.out.println(text);
System.out.println(Arrays.toString(t2));
TermPositionVector tpv = (TermPositionVector) reader.getTermFreqVector(i, "content");
TokenStream ts = TokenSources.getTokenStream(tpv);
System.out.println(ts);
}
// TermPositionVector tpv = (TermPositionVector) reader.getTermFreqVector(0, "content");
//
// TokenStream ts = TokenSources.getTokenStream(tpv);
//
// Formatter formatter = new Formatter() {
//
// public String highlightTerm(String srcText, TokenGroup g) {
//
// if (g.getTotalScore() <= 0) {
//
// return srcText;
//
// }
//
// return "<b>" + srcText + "</b>";
//
// }
//
// };
//
// Highlighter highlighter = new Highlighter(formatter, new QueryScorer(
//
// query));
//
// String result = highlighter.getBestFragments(ts, text, 5, "…");
//
// System.out.println("result:\n\t" + result);
reader.close();
}
}
分享到:
相关推荐
在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z at org.apache.lucene.index....
例如,为了提高搜索速度,可以使用MultiFieldQueryParser进行多字段查询,或者使用Filter来限制搜索范围。同时,通过设置缓存和使用NRT(Near Real Time)模式,可以实现近乎实时的搜索体验。 总结来说,Lucene.Net...
文件名中的"lucene paoding paodi"标签,暗示了这是关于Lucene使用Paoding分词器进行中文索引的示例或者库文件。开发者可以解压这个文件,参考其中的代码示例,学习如何在自己的项目中集成并使用PaodingAnalysis。 ...
除了预定义的分析器,"lucene-analysis.jar"还提供了自定义分析器的基础框架。开发者可以根据具体需求,组合使用Tokenizers(分词器)、TokenFilters(过滤器)和CharFilters(字符过滤器)来构建个性化的分析流程。...
lucene-highlighter.jar lucene-highlighter.jar
源码学习可以帮助我们理解Lucene的工作原理,提升对搜索引擎的理解和使用能力。以下是一些关键类的学习要点: 1. `org.apache.lucene.index.IndexWriter`:负责索引的创建和更新,是与索引交互的主要接口。 2. `org...
标题中的“vb.net2.0_Lucene_test.rar_lucene_lucene vb.n_lucene.net vb”表明这是一个关于使用VB.NET 2.0版本实现Lucene搜索引擎的测试项目。Lucene是一个高性能、全文本搜索库,广泛应用于Java开发,而这里则是将...
使用"apache-lucene-analyzers.jar"时,开发者需要根据实际应用的需要选择合适的分析器,以确保文本能够被正确地索引和搜索。在Java程序中,可以通过导入相关的类并实例化分析器来实现这一功能。 总的来说,"apache...
lucene-queries-2.9.0.jar 内含有org.apache.lucene.search.DuplicateFilter
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
Linux Lucene 8.10.0是Apache Lucene项目的一个关键版本,它是一个高性能、全功能的文本搜索库,广泛应用于Java开发中。Lucene提供了丰富的搜索功能,包括全文检索、高级分析器、索引优化等,为开发者构建复杂的搜索...
这个“lucene基本包”包含了Lucene的核心组件,是理解和使用Lucene进行信息检索的基础。 1. **全文检索引擎架构** Lucene的核心理念是建立索引,以便快速查找文档中的信息。它通过将文本数据转换成便于搜索的结构...
最新版linux lucene-8.8.2.tgz最新版linux lucene-8.8.2.tgz最新版linux lucene-8.8.2.tgz
《Lucene.Net中文分词详解》 在信息技术领域,搜索引擎的构建是不可或缺的一部分,而Lucene.NET作为一款高性能、全文检索引擎库,为开发者提供了强大的文本检索能力。在这个专题中,我们将聚焦于“lucene.net....
Lucene采用3.03版,太新版和 ik paoding不兼容。 ----------------------------------------- 极易分词只支持1.9-2.4版,未测试 IKAnalyzer分词 2012版不支持,采用3.2.8版 在使用2012版时异常:...
org.apache.lucene.analysis.cjk.CJKAnalyzer .......
“META-INF”目录则包含了Lucene的相关元数据,如MANIFEST.MF文件,它记录了jar包的基本信息和依赖关系,这对于构建和运行环境的配置至关重要。在部署和运行Lucene_CN.jar时,这些元数据会帮助系统正确地加载和执行...
首先,让我们了解一下Lucene的基本架构。Lucene的核心组件包括索引和查询。索引是将文档内容转化为便于搜索的结构,而查询则是根据用户输入的关键词查找匹配的文档。在Lucene-2.9.2中,索引过程涉及文档分析、字段...
lucene-3.0.2.zip lucene-3.0.2.zip