陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

1.增加schema.xml中的检查字段。

<field name="title" type="text_cn" indexed="true" stored="true" required="false" multiValued="false" />

<fieldType name="text_cn" class="solr.TextField">
        <analyzer type="index">
            <!--使用HanLP分析器进行分词 -->
            <tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory" mode="max-word"/>
            <!-- 将分词结果同时转换为拼音 -->
            <filter  class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory"  minTermLenght="2" />
             <filter    class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory"    minGram="6" maxGram="20" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="com.hankcs.lucene.HanLPTokenizerFactory" mode="max-word"/>
            <filter class="com.hankcs.lucene.analysis.synonym.SynonymFilterFactory"  synonyms="synonyms.txt" ignoreCase="true" expand="true" format="word2vec"/>
            <filter  class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory"  minTermLenght="2" />
            <filter    class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory"    minGram="6" maxGram="20" />
        </analyzer>
    </fieldType>

 

2.修改solrconfig.xml内容:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">  
    <!--<str name="queryAnalyzerFieldType">text_cn</str>  --> 
    <!-- a spellchecker built from a field of the main index   -->   
    <lst name="spellchecker">  
        <str name="name">default</str>  
        <!--这里指明需要根据哪个字段的索引为依据进行拼写检查。现配置 名为 spell 的字段-->  
        <str name="field">title</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>
  </searchComponent>  
  <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">  
    <!--默认参数-->  
    <lst name="defaults">  
      <str name="df">title</str>  
      <str name="spellcheck.dictionary">default</str>  
      <str name="spellcheck">true</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>spellcheck</str>  
    </arr>  
  </requestHandler>

3.重新创建索引使其生效.

PS:参考了另一位博主的文章http://blog.csdn.net/kevinxxw/article/details/49708311 用的分词器不一样,另外增加了针对拼音的智能纠错

posted on   宏宇  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2012-08-09 内网外网同时上的方法-静态路由
2012-08-09 DateTime.Now.Ticks 属性
2012-08-09 静态路由
2012-08-09 两个路由器互联连接
2012-08-09 C#时间格式“F"
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示