IKAnalyzer中文分词器V3.2.0使用手册
测试Ik分词器以及增加自己的词汇

测试Ik分词器以及增加⾃⼰的词汇测试
启动kibana,打开开发⼯具
ik_smart:最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": ["中华⼈民共和国"]
}
ik_max_word:最细粒度划分,穷尽词库。
GET _analyze
{
"analyzer": "ik_max_word",
"text": ["中华⼈民共和国"]
}
我们输⼊⼀个⼈名:⽐如说宋殿鑫想当Java开发⼯程师,宋殿鑫是⼈名,但是被分开了。
出现问题:有些词被拆开了!
这种⾃⼰需要的词,要加到我们的分词字典中!
Ik分词器增加⾃⼰的配置
来到 elasticsearch-7.6.1\plugins\ik\config ⽬录下,打开IKAnalyzer.cfg.xml
我们先创建⼀个dic⽂件,也就是字典,其实我们打开其他的dic⽂件也是⼀样的。
编写后注⼊到配置⽂件中。
然后重启es和kibana,可以看到我们新加的⽂件
再分词,可以发现,宋殿鑫成为了单独的字段,没被细分。
Lucene使用IKAnalyzer分词实例及IKAnalyzer扩展词库

Lucene使⽤IKAnalyzer分词实例及IKAnalyzer扩展词库⽅案⼀: 基于配置的词典扩充项⽬结构图如下:IK分词器还⽀持通过配置IKAnalyzer.cfg.xml⽂件来扩充您的专有词典。
⾕歌拼⾳词库下载:在web项⽬的src⽬录下创建IKAnalyzer.cfg.xml⽂件,内容如下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "/dtd/properties.dtd"><properties><comment>IK Analyzer 扩展配置</comment><!-- ⽤户可以在这⾥配置⾃⼰的扩展字典 --><entry key="ext_dict">/dicdata/use.dic.dic;/dicdata/googlepy.dic</entry><!-- ⽤户可以在这⾥配置⾃⼰的扩展停⽌词字典 --><entry key="ext_stopwords">/dicdata/ext_stopword.dic</entry></properties>词典⽂件的编辑与部署分词器的词典⽂件格式是⽆BOM 的UTF-8 编码的中⽂⽂本⽂件,⽂件扩展名不限。
词典中,每个中⽂词汇独⽴占⼀⾏,使⽤\r\n 的DOS ⽅式换⾏。
(注,如果您不了解什么是⽆BOM 的UTF-8 格式,请保证您的词典使⽤UTF-8 存储,并在⽂件的头部添加⼀空⾏)。
您可以参考分词器源码org.wltea.analyzer.dic 包下的.dic ⽂件。
词典⽂件应部署在Java 的资源路径下,即ClassLoader 能够加载的路径中。
ikanalyzer 用法

IKAnalyzer是一个开源的中文分词工具,它采用了基于汉字的切分方式,并提供了多种分词算法和模式匹配算法。
下面是一些IKAnalyzer的基本用法:1. 引入依赖:在使用IKAnalyzer之前,需要先将其添加到您的项目中。
如果您使用Maven进行项目管理,可以通过在pom.xml文件中添加以下依赖来引入IKAnalyzer:```xml<dependency><groupId>org.wltea.analyzer</groupId><artifactId>IKAnalyzer</artifactId><version>版本号</version></dependency>```请注意,您需要将“版本号”替换为您要使用的实际版本号。
2. 创建IKAnalyzer实例:在使用IKAnalyzer进行分词之前,需要创建一个IKAnalyzer实例。
您可以通过以下代码创建一个默认的IKAnalyzer实例:```javaAnalyzer analyzer = new IKAnalyzer();```3. 进行分词:一旦创建了IKAnalyzer实例,您可以使用它来对文本进行分词。
以下是一个简单的示例:```javaString text = "我爱中国";TokenStream tokenStream = analyzer.tokenStream("", text);while (tokenStream.incrementToken()) {System.out.println(tokenStream.getAttribute(CharTermAttribute.class ));}```此代码将打印出分词后的结果。
4. 自定义分词规则:如果您需要更精细的控制分词结果,可以使用自定义词典和规则。
Lucene 3.0 的几种分词系统

StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能。
2、 StandardAnalyzer
StandardAnalyzer根据空格和符号来完成分词,还可以完成数字、字母、E-mail地址、IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能。
3、 SimpleAnalyzer
SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号。分词器不能做词汇的过滤,之进行词汇的分析和分割。输出地词汇单元完成小写字符转换,去掉标点符号等分割符。
在全文检索系统开发中,通常用来支持西文符号的处理,不支持中文。由于不完成单词过滤功能,所以不需要过滤词库支持。词汇分割策略上简单,使用非英文字符作为分割符,不需要分词词库的支持。
13、 Paoding Analysis
Paoding Analysis中文分词具有极 高效率 和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。其效率比较高,在PIII 1G内存个人机器上,1秒可准确分词100万汉字。采用基于不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析。
7、 ChineseAnalyzer
ChineseAnalyzer功能与StandardAnalyzer分析器在处理中文是基本一致,都是切分成单个的双字节中文字符。在Lucene3.0版本中已经弃用。
8、 PerFieldAnalyzerWrapper
PerFieldAnalyzerWrapper功能主要用在针对不同的Field采用不同的Analyzer的场合。比如对于文件名,需要使用KeywordAnalyzer,而对于文件内容只使用StandardAnalyzer就可以了。通过addAnalyzer()可以添加分类器。
11个Java开源中文分词器使用方法和分词效果对比

1、学会使用11大Java开源中文分词器
2、对比分析11大Java开源中文分词器的分词效果
本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断。
11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口:
从上面的定义我们知道,在Java中,同样的方法名称和参数,但是返回值不同,这种情况不可以使用重载。
这两个方法的区别在于返回值,每一个分词器都可能有多种分词模式,每种模式的分词结果都可能不相同,第一个方法忽略分词器模式,返回所有模式的所有不重复分词结果,第二个方法返回每一种分词器模式及其对应的分词结果。
在这里,需要注意的是我们使用了Java8中的新特性默认方法,并使用stream把一个map 的value转换为不重复的集合。
下面我们利用这11大分词器来实现这个接口:
1、word分词器
2、Ansj分词器
3、Stanford分词器
4、FudanNLP分词器
5、Jieba分词器
6、Jcseg分词器
7、MMSeg4j分词器
8、IKAnalyzer分词器
9、Paoding分词器
10、smartcn分词器
11、HanLP分词器
现在我们已经实现了本文的第一个目的:学会使用11大Java开源中文分词器。
最后我们来实现本文的第二个目的:对比分析11大Java开源中文分词器的分词效果,程序如下:。
IKAnalyzer中文分词器V3.2.8使用手册

IKAnalyzer中文分词器V3.2使用手册目录1.IK Analyzer 3.X介绍 (2)2.使用指南 (5)3.词表扩展 (14)4.针对solr的分词器应用扩展 (16)5.关于作者 (18)1.IK Analyzer 3.X介绍IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。
最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。
新版本的IK Analyzer 3.X则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
1.1 IK Analyzer 3.X结构设计1.2 IK Analyzer 3.X特性●采用了特有的“正向迭代最细粒度切分算法“,具有80万字/秒的高速处理能力。
●采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
●优化的词典存储,更小的内存占用。
支持用户词典扩展定义●针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
1.3 分词效果示例IK Analyzer 3.2.8版本支持细粒度切分和最大词长切分,以下是两种切分方式的演示样例。
文本原文1:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。
●最大词长分词结果:ikanalyzer | 是| 一个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级| 的| 中文| 分词| 工具包| 从| 2006 | 年| 12 | 月| 推出| 1.0 | 版| 开始| ikanalyzer | 已经| 推出| 出了| 3 | 个| 大| 版本●最细粒度分词结果:ikanalyzer | 是| 一个| 一| 个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级| 量级| 的| 中文| 分词| 工具包| 工具| 从| 2006 | 年| 12 | 月| 推出|1.0 | 版| 开始| ikanalyzer | 已经| 推出| 出了| 3 | 个| 大| 版本文本原文2:作者博客: 电子邮件:linliangyi2005@●最大词长分词结果:作者| 博客| | 电子邮件| linliangyi2005@●最细粒度分词结果:作者| 博客| | linliangyi | 2007 | javaeye | com | 电子邮件| linliangyi2005@ | linliangyi | 2005 | gmail | com文本原文3古田县城关六一四路四百零五号●最大词长分词结果:古田县| 县城| 城关| 六一四| 路| 四百零五| 号●最细粒度分词结果:古田县| 古田| 县城| 城关| 六一四| 六一| 四| 路| 四百零五| 四| 百| 零| 五| 号文本原文4曙光天阔I620r-G /A950r-F 夏普SH9020C●最大词长分词结果:曙光| 天| 阔| i620r-g | a950r-f | 夏普| sh9020c●最细粒度分词结果:曙光| 天| 阔| i620r-g | i | 620 | r | g | a950r-f | a | 950 | r | f | 夏普| sh9020c | sh |9020 | c2.使用指南2.1下载地址GoogleCode开源项目:/p/ik-analyzer/ GoogleCode SVN下载:/svn/trunk/2.2与相关项目的版本兼容IK分词器版本Lucene 版本Solr版本3.1.3GA及先前版兼容2.9.1及先前版本没有solr接口3.1.5GA 兼容2.9.1及先前版本对solr1.3提供接口实现(详细请参考对应版本使用手册)3.1.6GA 兼容2.9.1及先前版本对solr1.3、solr1.4提供接口实现(详细请参考对应版本使用手册)3.2.0G及后续版本兼容Lucene2.9及3.0版本不支持Lucene2.4及先前版本仅对solr1.4提供接口实现(请参考本手册solr部分说明)2.3安装部署IK Analyzer安装包包含:1.《IKAnalyzer中文分词器V3.X使用手册》(即本文档)2.IKAnalyzer3.X.jar(主jar包)3.IKAnalyzer.cfg.xml(分词器扩展配置文件)4.ext_stopword.dic(扩展的stopword词典,3.2以上版本提供)它的安装部署十分简单,将IKAnalyzer3.X.jar部署于项目的lib目录中;IKAnalyzer.cfg.xml 与ext_stopword.dic文件放置在代码根目录(对于web项目,通常是WEB-INF/classes 目录,同hibernate、log4j等配置文件相同)下即可。
IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量

IKanalyzer、ansj_seg、jcseg三种中⽂分词器的实战较量选⼿:IKanalyzer、ansj_seg、jcseg硬件:i5-3470 3.2GHz 8GB win7 x64⽐赛项⽬:1、搜索;2、⾃然语⾔分析选⼿介绍: 1,IKanalyzer IKanalyzer采⽤的是“正向迭代最细粒度切分算法”,是⽐较常见⽽且很容易上⼿的分词器了。
⼀般新⼿上路学习lucene或者solr都会⽤这个。
优点是开源(其实java分词器多是开源的,毕竟算法都是业内熟知的)、轻量、⽬前来看没有太⼤的bug,源码简单易懂,做⼆次开发也很简单,即使遇到solr/Lucene版本更新,只需要⾃⼰稍微修改下实现类就可以通⽤。
缺点是过于简单⽩痴,只是简单的根据配置好的词库进⾏分词,没有任何智能可⾔,连“和服”、“和服务器”这种⽼梗都破不了。
我⼿头的IKanalyzer是被我进⾏⼆次开发后的版本,修改了⼀些问题,词库读取⽅式改成树形。
IKanalyzer可以作为⾮智能分词器的代表出场。
2,ansj_segansj_seg分词器⽤的⼈可能不太多吧,不过个⼈觉得是开源分词器⾥最强悍功能最丰富的。
作者孙建,我曾在微博上与他有过简单的交流,讨论过ansj_seg分词器的⼀些⼩的bug和不⾜。
ansj_seg基于中科院的 ictclas 中⽂分词算法,智能、⾼效。
虽然现在已经有ictclas 的for java版本,但是 ansj_seg从实现到使⽤来说要强⼤的多,⽽且作者⾃产⾃销⾃⽤,很多细节和⼩功能都有考虑,在索引和⾃然语⾔分析⽅⾯都有很优秀的表现。
我⼿头的ansj_seg是⾃⼰修复了⼀些bug后的版本。
ansj_seg可以作为ictclas 算法实现的分词器的代表出场。
3,jcsegjcseg分词器使⽤的是mmseg算法和fmm算法,这个分词器类似ansj_seg的很多地⽅,智能、⼈性化,个⼈感觉体验要超过同门师兄弟mmseg4j,所以可以作为mmseg算法实现的分词器的代表出场。
Ikanalyzer分词器动态自定义词库的方法

Ikanalyzer分词器动态自定义词库的方法IKanalyzer可通过配置Ikanalyzer.cfg.xml进行自定义词库,但有时需要在程序中根据不同的文章动态调用不同的词库进行分词,这就需要自定义Configuration类来实现。
方法如下:首先,拷贝Ikanalyzer源码中的DefaultConfig.java,改为MyConfiguration.java,然后做如下改写:public class MyConfiguration implements Configuration{//懒汉单例private static final Configuration CFG = new MyConfiguration();/** 分词器默认字典路径*/private String PATH_DIC_MAIN = "org/wltea/analyzer/dic/main2012.dic";//需要把static final去掉private String static final PATH_DIC_QUANTIFIER ="org/wltea/analyzer/dic/quantifier.dic";/** 分词器配置文件路径*/private static final String FILE_NAME = "IKAnalyzer.cfg.xml";//保留静态自定义词库的功能//配置属性——扩展字典private static final String EXT_DICT = "ext_dict";//配置属性——扩展停止词典private static final String EXT_STOP = "ext_stopwords";private Properties props;/** 是否使用smart方式分词*/private boolean useSmart;/*** 返回单例* @return Configuration单例*/public static Configuration getInstance(){return CFG;}/** 初始化配置文件*/MyConfiguration(){props = new Properties();InputStream input =this.getClass().getClassLoader().getResourceAsStream(FILE_NAME);if(input != null){try {props.loadFromXML(input);} catch (InvalidPropertiesFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}/*** 返回useSmart标志位* useSmart =true ,分词器使用智能切分策略,=false则使用细粒度切分* @return useSmart*/public boolean useSmart() {return useSmart;}/*** 设置useSmart标志位* useSmart =true ,分词器使用智能切分策略,=false则使用细粒度切分* @param useSmart*/public void setUseSmart(boolean useSmart) { eSmart = useSmart;}/*** 新加函数:设置主词典路径** @return String 主词典路径*/public void setMainDictionary(String path) { this.PATH_DIC_MAIN = path;}/*** 获取主词典路径** @return String 主词典路径*/public String getMainDictionary(){return PATH_DIC_MAIN;}/*** 获取量词词典路径* @return String 量词词典路径*/public String getQuantifierDicionary(){return PATH_DIC_QUANTIFIER;}/*** 获取扩展字典配置路径* @return List<String> 相对类加载器的路径*/public List<String> getExtDictionarys(){List<String> extDictFiles = new ArrayList<String>(2);String extDictCfg = props.getProperty(EXT_DICT);if(extDictCfg != null){//使用;分割多个扩展字典配置String[] filePaths = extDictCfg.split(";");if(filePaths != null){for(String filePath : filePaths){if(filePath != null && !"".equals(filePath.trim())){ extDictFiles.add(filePath.trim());}}}}return extDictFiles;}/*** 获取扩展停止词典配置路径* @return List<String> 相对类加载器的路径*/public List<String> getExtStopWordDictionarys(){List<String> extStopWordDictFiles = new ArrayList<String>(2); String extStopWordDictCfg = props.getProperty(EXT_STOP); if(extStopWordDictCfg != null){//使用;分割多个扩展字典配置String[] filePaths = extStopWordDictCfg.split(";");if(filePaths != null){for(String filePath : filePaths){if(filePath != null && !"".equals(filePath.trim())){extStopWordDictFiles.add(filePath.trim());}}}}return extStopWordDictFiles;}}调用方法在分词程序中调用方法如下:String text = "";//需要分词的字符串MyConfiguration mycfg = new MyConfiguration();mycfg.setUseSmart(true); //设置为智能分词mycfg.setMainDictionary("msay.dic"); //动态设置自定义的词库IKSegmenter seg = new IKSegmenter(new StringReader(text) ,mycfg);.......本源码经测试可正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.4 Lucene 用户快速入门 代码样例 IKAnalyzerDemo
/** * IK Analyzer Demo * @param args */ import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc;
| 2006 | 年 | 12 | 月 | 推出 | 1.0 个大 | 个 | 版本
3 |
作者博客: 分词结果:
电子邮件:linliangyi2005@
作者 | 博客 | | linliangyi | 2007 | javaeye | com | 电子邮 件 | 邮件地址 | linliangyi2005@ | linliangyi | 2005 | gmail | com
Directory directory = null; IndexWriter iwriter = null; IndexSearcher isearcher = null; try { //建立内存索引对象 directory = new RAMDirectory(); iwriter = new IndexWriter(directory, analyzer, true , IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED)); iwriter.addDocument(doc); iwriter.close(); //实例化搜索器 isearcher = new IndexSearcher(directory); //在索引器中使用IKSimilarity相似度评估器 isearcher.setSimilarity(new IKSimilarity());
�
�
优化的词典存储,更小的内存占用。支持用户词典扩展定义 针对 Lucene 全文检索优化的查询分析器 IKQueryParser(作者吐血推荐);采用歧义分 析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。
1.3 分词效果示例
文本原文 1: IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。 分词结果: ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 从 | 版 | 开始 | ikanalyzer | 已经 | 文本原文 2: 永和服装饰品有限公司 分词结果: 永和 | 和服 | 服装 | 装饰品 | 装饰 | 饰品 | 有限 | 文本原文 3: 公司 推出 | 出了 | 的 | 轻量
import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; //引用IKAnalyzer3.0 的类 import org.wltea.analyzer.lucene.IKAnalyzer; import org.wltea.analyzer.lucene.IKQueryParser; import org.wltea.analyzer.lucene.IKSimilarity; /** * @author linly * */ public class IKAnalyzerDemo { public static void main(String[] args){ //Lucene Document的域名 String fieldName = "text"; //检索内容 String text = "IK Analyzer 是一个结合词典分词和文法分词的中文分词开源 工具包。它使用了全新的正向迭代最细粒度切分算法。"; //实例化IKAnalyzer 分词器 Analyzer analyzer = new IKAnalyzer();
它的安装部署十分简单, 将 IKAnalyzer3.X.jar 部署于项目的 lib 目 录 中; IKAnalyzer.cfg.xml 与 ext_stopword.dic 文件放置在代码根目录(对于 web 项目,通常是 WEB-INF/classes 目录,同 hibernate、log4j 等配置文件相同)下即可。
IKAnalyzer 中文分词器 V3.2 使用手册
目录
1.IK Analyzer 3.X 介绍....................................................................................................... 2 2.使用指南..............................................................................................................................5 3.词表扩展........................................................................................................................... 12 4.针对 solr 的分词器应用扩展.........................................................................................14 5.关于作者........................................................................................................................... 16
执行结果:
命中:1
内 容:Document<stored/uncompressed,indexed,tokenized<text:IK Analyzer 是 一个结合词典分词和文法分词的中文分词开源工具包。 它使用了全新的正向迭代最细粒度切分算 法。>>
2.3 安装部署
IK Analyzer 安装包包含: 1. 2. 3. 4. 《IKAnalyzer 中文分词器 V3.X 使用手册》 (即本文档) IKAnalyzer3.X.jar(主 jar 包) IKAnalyzer.cfg.xml(分词器扩展配置文件) ext_stopword.dic(扩展的 stopword 词典,3.2 以上版本提供)
1.IK Analyzer 3.X 介绍
IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IK Analyzer 3.X 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。
1.1 IK Analyzer 3.X 结构设计
1.2 IK Analyzer 3.X 特性
� � 采用了特有的“正向迭代最细粒度切分算法“,具有 60 万字/秒的高速处理能力。 采用了多子处理器分析模式,支持:英文字母(IP 地址、Email、URL)、数字(日期 , 常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理 。
String keyword = "中文分词工具包"; //使用IKQueryParser查询分析器构造Query对象 Query query = IKQueryParser.parse(fieldName, keyword); //搜索相似度最高的5条记录 TopDocs topDocs = isearcher.search(query , 5); System.out.println("命中:" + topDocs.totalHits); //输出结果 ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (int i = 0; i < topDocs.totalHits; i++){ Document targetDoc = isearcher.doc(scoreDocs[i].doc); System.out.println("内容:" + targetDoc.toString()); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (LockObtainFailedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(isearcher != null){ try { isearcher.close(); } catch (IOException e) { e.printStackTrace(); } } if(directory != null){ try { directory.close(); } catch (IOException e) { e.printStackTrace(); } } } } }