文档章节

solr4.7开发实践 6——拼写检查

一枚Sir
 一枚Sir
发布于 2014/05/06 17:06
字数 432
阅读 2660
收藏 6

①拼写检查不同于其他域,它在建立索引时需要分词,但是检索时不需要分词,所以要建立一个特殊的域,以供拼写检查:

在schema.xml文件里设置所需的拼写检查域都有哪些字段:

 <field name="spell" type="text_spell" indexed="true" stored="false" multiValued="true" />

<copyField source="name" dest="spell"/>
 <copyField source="content" dest="spell"/>

<fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
     <analyzer type="index">
     <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
     </analyzer>
     <analyzer type="query">
       <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     </analyzer>
  </fieldType>

②在solrconfig.xml文件里设置:

 <searchComponent name="spellerror" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">text_spell</str>
    <!-- a spellchecker built from a field of the main index   --> 
    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">spell</str>
      <str name="classname">solr.DirectSolrSpellChecker</str>
      <str name="distanceMeasure">internal</str>
      <float name="accuracy">0.5</float>
      <int name="maxEdits">2</int>
      <int name="minPrefix">1</int>
      <int name="maxInspections">5</int>
      <int name="minQueryLength">2</int>
      <float name="maxQueryFrequency">0.01</float>
    </lst>
 <lst name="spellchecker">
   <str name="classname">solr.FileBasedSpellChecker</str>
   <str name="name">file</str>
   <str name="sourceLocation">spellings.txt</str>
   <str name="characterEncoding">UTF-8</str>
   <str name="spellcheckIndexDir">spellcheckerFile</str>
    </lst>
  </searchComponent>
  <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="df">spell</str>
      <str name="spellcheck.dictionary">default</str>
      <str name="spellcheck">on</str>
      <!-- <str name="spellcheck.extendedResults">true</str>       
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.alternativeTermCount">5</str>
      <str name="spellcheck.maxResultsForSuggest">5</str> -->       
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.collateExtendedResults">true</str>  
      <!-- <str name="spellcheck.maxCollationTries">10</str>
      <str name="spellcheck.maxCollations">5</str> -->          
    </lst>
    <arr name="last-components">
      <str>spellerror</str>
    </arr>
  </requestHandler>

③solrj里的代码

/**
    * @method: testSpellCheck
    * @Description: 拼写检查 
    * 
    * @author: ChenYW
    * @date 2014-4-15 下午06:14:56
    */
    public String spellCheck(String word){
        SolrQuery query = new SolrQuery();  
        query.set("defType","edismax");//加权
        query.set("qf","name^20.0");
        
        query.set("spellcheck", "true");  
        query.set("spellcheck.q", word);
        query.set("qt", "/spell");  
        query.set("spellcheck.build", "true");//遇到新的检查词,会自动添加到索引里面  
        query.set("spellcheck.count", 5);
           
        try {  
         QueryResponse rsp = server.query(query);  
         SpellCheckResponse re=rsp.getSpellCheckResponse();  
         if (re != null) {  
          if(!re.isCorrectlySpelled()){
              String t = re.getFirstSuggestion(word);//获取第一个推荐词  
     System.out.println("推荐词:" + t);
     return t;
          }                  
         } 
        } catch (SolrServerException e) {  
            e.printStackTrace();  
        }  
        return null;
    }

 

 

 

© 著作权归作者所有

一枚Sir
粉丝 119
博文 209
码字总数 350904
作品 0
朝阳
架构师
私信 提问
加载中

评论(6)

劲霸King-Boxing
劲霸King-Boxing

引用来自“刘刘AD”的评论

楼主,这个实现能支持中文?我的不能支持中文,英文是可以的。

引用来自“shigy_007”的评论

哥们有好的解决方案吗?
我也遇到了这个问题,您解决了吗
s
shigy_007

引用来自“刘刘AD”的评论

楼主,这个实现能支持中文?我的不能支持中文,英文是可以的。
哥们有好的解决方案吗?
刘刘AD
刘刘AD
楼主,这个实现能支持中文?我的不能支持中文,英文是可以的。
虚客
虚客
索引里面有数据
虚客
虚客
和你一模一样的配置,推荐词返回null
思绪踌躇
079
MindManager的优势和特性

目前市面上的思维导图软件有很多,但是大多数人却只用Mindmanager这一款软件,这不仅仅是其产品品牌的知名度,更主要的还是依靠其产品优势和特性更加符合用户的使用习惯,因此受到了市场的欢...

neluzyy1
2015/03/17
119
0
5. Effective Java 第三版——使用依赖注入取代硬连接资源

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104
2017/12/25
0
0
Intellij Idea 使用日常记录

作者使用的Idea版本: 1.去除Mybatis Mapper Xml文件中Sql语句块绿色背景 问题描述:idea中使用mybatis开发,mapper的xml中SQL语句快背景是绿色的,看起来很不舒服,如下图所示: 解决办法:...

MaxBill
2018/08/24
110
0
推荐 15 款很棒的文本编辑器

本文中提及的文本编辑器软件,并非全部开源,仅供参考。 1. Notepad++: 这是 Windows 记事本一个最好的替换产品,主要特点包括: a. 自动完成 b. 语法高亮 c. 拖放特性 d. 搜索 e. 缩放 2. P...

红薯
2011/05/11
491.8K
40
编码神器 Sublime Text 包管理工具及扩展大全

Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查...

oschina
2013/10/21
18K
58

没有更多内容

加载失败,请刷新页面

加载更多

新建作业20191011121223

2.编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound,Sally shouted,"By the Great Pumpkin,what was that!" #include<stdio.h>int main(){printf("\a");......

电子197朱妍
35分钟前
6
0
家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
56分钟前
8
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
57分钟前
8
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
59分钟前
12
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部