import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
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.IndexWriter;
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.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.AttributeImpl;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
/**
* 采用IKAanlyzer分词器查询
* @author admin
*
*/
public class IKAnalyzerSearchWord {
private static String fieldName = "text";
public static void searchWord(String field ,String keyword) {
if(null!=field&&!"".equals(field)){
fieldName = field;
}
String text = "IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, " +
"IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。" +
"新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 ";
Analyzer analyzer = new IKAnalyzer();
StringReader reader = new StringReader(text);
long startTime = System.currentTimeMillis(); //开始时间
TokenStream ts = analyzer.tokenStream("*", reader);
Iterator<AttributeImpl> it = ts.getAttributeImplsIterator();
while(it.hasNext()){
System.out.println((AttributeImpl)it.next());
}
System.out.println("");
long endTime = System.currentTimeMillis(); //结束时间
System.out.println("IK分词耗时" + new Float((endTime - startTime)) / 1000 + "秒!");
Directory dir = null;
IndexWriter writer = null;
IndexSearcher searcher = null;
try {
dir = new RAMDirectory();
writer = new IndexWriter(dir, analyzer, true,
IndexWriter.MaxFieldLength.LIMITED);
System.out.println(IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc.add(new Field(fieldName, text, Field.Store.YES,
Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
//在索引其中使用IKSimilarity相似评估度
searcher = new IndexSearcher(dir);
searcher.setSimilarity(new IKSimilarity());
Query query = IKQueryParser.parse(fieldName, keyword);
TopDocs topDocs = searcher.search(query, 5);
System.out.println("命中:"+topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < scoreDocs.length; i++) {
Document targetDoc = searcher.doc(scoreDocs[i].doc);
System.out.println("內容:"+targetDoc.toString());
}
} catch (Exception e) {
System.out.println(e);
}finally{
try {
searcher.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
dir.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
IKAnalyzerSearchWord.searchWord("","中文分词工具包");
System.out.println(System.currentTimeMillis()-a);
}
}
分享到:
相关推荐
【Lucene4.7+IK Analyzer中文分词入门教程】 Lucene是一个开源的全文检索库,它提供了文本分析、索引和搜索的核心工具。在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源...
**IKanalyzer分词器详解** IKAnalyzer是一款开源的、基于Java实现的中文分词工具,主要用于对中文文本进行分词处理。它以其高效、灵活的特性,在许多Java开发的搜索引擎和自然语言处理项目中得到广泛应用。这个"IK...
总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...
IKAnalyzer是一款基于Java语言开发的中文分词工具包,它在Lucene的基础上进行了优化和扩展,特别适用于全文检索和自然语言处理任务。IKAnalyzer提供了强大的中文分词能力,能够有效地识别和处理中文词汇,提高了搜索...
解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError...原因IKAnalyzer中参考手册中的例子是使用的lucene3.4,与4.0已经是不兼容了。本资源包含了IKAnalyzer2012_FF_hf1.jar及源码
### IKAnalyzer中文分词器V3.1.1使用手册 #### 1. IKAnalyzer 3.1.1 介绍 IKAnalyzer是一个基于Java语言开发的开源轻量级...通过这个例子,开发者可以快速了解如何在实际应用中集成IKAnalyzer来进行中文分词处理。
### IKAnalyzer中文分词器V3.2.8使用手册 #### 1. IKAnalyzer3.X介绍 IKAnalyzer是一款开源的、基于Java语言开发的轻量级中文分词工具包。自2006年12月发布1.0版以来,已经经历了多个大版本的迭代,目前最新版本为...
文件说明:本zip包含IKAnalyzer的src及elasticsearch可运行插件plugins两部分。 使用说明:修改src源码后可通过IKAnalzyerDemo、LuceneIndexAndSearchDemo测试分词及检索。将编译后jar包替换plugins中相应jar包即可...
分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...
在这个“Lucene全文检索的各种例子”中,我们将探讨如何使用不同的分词器,如ikAnalyzer和smartChineseAnalyzer,来实现中文文本的索引和搜索。 首先,让我们深入理解一下Lucene。Lucene的核心功能包括文档的索引和...
IK分词器(Intelligent Chinese Analyzer for Solr)是针对Java环境下Lucene/Solr的高效、灵活的中文分词组件,它的目标是为Java开发人员提供一个快速、稳定、扩展性好的中文分词工具。 在Solr5中,IK分词器已经是...
在本文中,我们将通过一个简单的例子来探讨如何使用Lucene和IKAnalyzer进行中文分词及建立索引。 首先,我们需要引入相关的库文件,包括Lucene的核心库和IKAnalyzer。在Java项目中,这通常通过Maven或Gradle的依赖...
在这个过程中,你会了解到如何创建Analyzer来处理中文分词,因为 Lucene 默认并不支持中文。例如,可以使用IK Analyzer、SmartCN Analyzer或jieba分词库来实现。此外,你还会学习到如何设计查询解析器,将用户的输入...
在这个例子中,"text_field"字段将使用"my_ikAnalyzer"进行分析,该分析器基于ik_max_word tokenizer,能尽可能多地切分出词汇,并应用了小写转换和ASCII折叠过滤器,确保搜索的兼容性。 总的来说,"elasticsearch-...
总结来说,"lucene.zip"包含了一个基于Lucene的简单搜索系统实例,利用了IK分词器对中文文本进行分词,构建了索引,并实现了搜索功能。这个例子对于理解和学习如何在实际项目中使用Lucene进行信息检索是非常有价值的...
在中文环境下,Lucene需要配合分词器,如IK Analyzer或HanLP,对中文文本进行分词处理。分词器会根据语法规则和词汇库将句子拆分成单个词语,以便于搜索。 ### 5. 在留言项目中的应用 在描述中提到的Leave_msg_...
默认的Analyzer如StandardAnalyzer处理英文文本,对于中文则可以使用SmartChineseAnalyzer或IKAnalyzer。 2. **Field定义**:每个文档由多个Field组成,每个Field都有自己的属性,如是否存储、是否可搜索、是否可...