Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块。

搜索拼写检查模块实现类在lucene-suggest-x.xx.x.jar包中,package名为org.apache.lucene.search.spell,其中拼写检查功能的核心实现有3个类,

分别为:SpellChecker、DirectSpellChecker、WordBreakSpellChecker;

3个类提供了不同的拼写检查方式,区别如下:

SpellChecker:提供了原始的拼写检查功能,在拼写检查前需要重新建立索引(根据txt字典文件建立索引或者已有索引文件的某个字段建立索引),然后才可以进行拼写检查;

SpellChecker源码分析查看如下网站:http://www.tuicool.com/articles/naIBjm

DirectSpellChecker:提供了改进的拼写检查功能,可以直接利用已有索引文件进行拼写检查,不需要重新建立索引(solr系统默认采用此种方式进行拼写检查);

WordBreakSpellChecker:也不需要重新建索引,可以利用已有索引进行拼写检查。

SpellChecker使用:

建立索引有三种方式:

PlainTextDictionary:用txt文件初始化索引

LuceneDictionary:用现有索引的某一个字段初始化索引

HighFrequencyDictionary:用现有索引的某个字段初始化索引,但每个索引条目必须满足一定的出现率

 //新索引目录
String spellIndexPath = “D:\\newPath”;
//已有索引目录
String oriIndexPath = "D:\\oriPath";
//字典文件
String dicFilePath = “D:\\txt\\dic.txt”; //目录
Directory directory = FSDirectory.open((new File(spellIndexPath)).toPath()); SpellChecker spellChecker = new SpellChecker(directory); //以下几步用来初始化索引
IndexReader reader = DirectoryReader.open(FSDirectory.open((new File(oriIndexPath)).toPath()));
//利用已有索引
Dictionary dictionary = new LuceneDictionary(reader, fieldName);
//或者利用txt字典文件
//Dictionary dictionary = new PlainTextDictionary((new File(dicFilePath)).toPath());
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
spellChecker.indexDictionary(dictionary, config, true); String queryWord = "beijink";
int numSug = 10;
//拼写检查
String[] suggestions = spellChecker.suggestSimilar(queryWord, numSug); reader.close();
spellChecker.close();
directory.close();

DirectSpellChecker使用:

 DirectSpellChecker checker = new DirectSpellChecker();
String readerPath = "D:\\path";
IndexReader reader = DirectoryReader.open(FSDirectory.open(
(new File(readerPath)).toPath()));
Term term = new Term("fieldname", "querytext");
int numSug = 10;
SuggestWord[] suggestions = checker.suggestSimilar(term, numSug, reader);

lucene拼写检查模块的更多相关文章

  1. solr拼写检查配置

    拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能. 那么什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是 ...

  2. 1.7.7 Spell Checking -拼写检查

    1. SpellCheck SpellCheck组件设计的目的是基于其他,相似,terms来提供内联查询建议.这些建议的依据可以是solr字段中的terms,外部可以创建文本文件, 或者其实lucen ...

  3. solr拼写检查代码逻辑

    自定义的solr搜索系统作为web应用发布到tomcat后,运行过程中其搜索代码逻辑如下: 用户solr搜索应用发送搜索请求URL,solr应用的org.apache.solr.servlet.Sol ...

  4. Emacs中的拼写检查

    无论是在Emacs中写英文日记(diary).Org mode笔记,还是撰写程序的注释和文档,拼写检查都是一项提高工作效率.保证成果品质的必不可缺的工具.拼写检查对于常见的文字处理软件(如Word.L ...

  5. 关闭Pycharm拼写检查

    转载: https://blog.csdn.net/u013088062/article/details/50001189 Pycharm作为一款优秀的PythonIDE,唯一让我觉得不安的就是它的拼 ...

  6. solr特点四: SpellCheck(拼写检查)

    接下来,我将介绍如何向应用程序添加 “您是不是要找……”(拼写检查). 提供拼写建议 Lucene 和 Solr 很久以前就开始提供拼写检查功能了,但直到添加了 SearchComponent架构之后 ...

  7. solr入门之solr的拼写检查功能的应用级别尝试

    今天主要是收集了些拼写检查方面的资料和 尝试使用一下拼写检查的功能--=遇到了不少问题 拼写检查的四种配置眼下我仅仅算是成功了半个吧 --------------------------------- ...

  8. 21行python代码实现拼写检查器

    引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供很好的拼写检查,比方你输入 speling,谷歌会立即返回 spelling. 前几天,看到http://norvig.com/spe ...

  9. 如何在Word中排出漂亮的代码,去除回车符,去除拼写检查

    这位博主写到很到位,这里补充一下在VBA里用模块的部分. https://blog.csdn.net/code4101/article/details/41802715 1.放代码的方式是贴纯文本. ...

随机推荐

  1. J - Invitation Cards

    题目大意:邀请卡 在电视的时代,没有多少人会去剧院观看演出.古老的喜剧演员 Malidinesia知道这个事实.他们想传播戏剧尤其是古老的戏剧,他们在邀请卡上打印必要的信息和一些节目,一些学生被雇佣过 ...

  2. DTD与XSD的区别

    DTD=类型定义(Documnet Type Definition) XSD=XML结构定义 ( XML Schemas Definition ) DTD 就相当于 XML 中的“词汇”和“语法”,不 ...

  3. System.Threading.Timer 使用

    //定义计时器执行完成后的回调函数 TimerCallback timecallback = new TimerCallback(WriteMsg); //定义计时器 System.Threading ...

  4. random.sample

    import random k = random.sample(xrange(0x41, 0x5b), 26) print k import random k = random.sample(xran ...

  5. 【转】Android Studio中Git的配置及协同开发

    一. Android Stutio配置git   setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置 ...

  6. Android中实现跨app之间数据的暴露与接收

    例如一个小项目:实现单词本的添加单词等功能 功能:不同的方式实现跨app之间数据的暴露与接收 暴露端app:实现单词的添加(Word.Translate),增删改查: 接收端app:模糊查询,得到暴露 ...

  7. COGS 渡轮问题 (LIS规定字典序输出方案数)

    /* 下标字典序最小 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 1 ...

  8. codevs1955光纤通信(并查集)

    /* 第一眼以为就是个区间覆盖 然后敲完提交60分0.0 然而觉得自己的做法很对 以为数据错了 后来发现XXX他的牛棚是一圈(牛过得挺好的啊 还能赏湖...) 然后枚举断开的点 可惜n=750 p=1 ...

  9. Activity对话框

    对话框Activity style 在style.xml中加入 <!--对话框风格--> <style name="dialog" parent="@a ...

  10. IE浏览器中设为首页

    <a onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('<%=Configurati ...