• solr配置同义词,停止词,和扩展词库(IK分词器为例)


    定义

    同义词:搜索结果里出现的同义词。如我们输入”还行”,得到的结果包括同义词”还可以”。

    停止词:在搜索时不用出现在结果里的词。比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。

    扩展词:在搜索结果里额外出现的词。扩展词只能是你输入词的本身或子串。比如我们 输入”重庆开县人”,正常分词得到的结果是“重庆” “开县”“人”;当我们在扩展词里加入“重庆开县”时,分词的结果是“重庆开县”“重庆” “开县”“人”。

    配置同义词

    1.在solr_home的conf目录下的schema.xml 中配置同义词text_syn:

    <!-- 配置IK分词器的同义词 -->
     <fieldType name="text_syn" class="solr.TextField">
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    2.假定在solr_home的conf目录下的schema.xml 中要对shortName字段进行同义词配置,则我们需要将type属性设为上向配置的”text_syn”

    <field name="shortName" type="text_syn" indexed="true" stored="true" />
    • 1

    3.在conf目录下的 synonyms.txt 中增加同义词,如:

    这里写图片描述
    这里我多说两句:上面红框里的 => 右侧的词是左侧词的同义词,多个时用空格隔开。还有就是,最好不要直接打开synonyms.txt这个文件,因为加入的汉字在保存后会查不出来,因为txt不是UTF-8的格式保存的。

    4.测试同义词

    输入高兴:
    
    • 1

    这里写图片描述

    输入中华:
    
    • 1

    这里写图片描述

    5.基于上面的问题,说下怎么解决,毕竟不论我们输入中华还是中国,都能有对应的同义词结果。

    首先,我们将synonyms.txt里的同义词用英文逗号隔开,然后将上面配置IK同义词里的expand属性设为true

    这里写图片描述

    我们输入:大大的,结果如下:

    这里写图片描述

    配置停止词和扩展词库。

    1.将IKAnalyzer解压文件夹下的stopword.dic和IKAnalyzer.cfg.xml复制到tomcat/webapps/solr/WEB-INF/classes下,再新建一个ext.dic,里面的格式和stopword.dic一致。

    2.修改IKAnalyzer.cfg.xml如下面的格式可以配置多个停止词或者扩展词库文件。

    <properties> 
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic;</entry>
    
        <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">english_stopword.dic;stopword.dic</entry>
    <properties> 

    输入“重庆开县”时,正常分词是只有”重庆” “开县”的
    在ext.dic里添加了”重庆开县”后,测试结果:
    这里写图片描述

    输入“重庆开县”时,正常分词是只有”重庆” “开县”的
    在stopword.dic里添加了“开县”之后,测试结果:
    这里写图片描述

    注意

    字段如果要能被分词,或是停止词,或是扩展词,需要在schema.xml里配置该字段时,给该字段的type属性配成分词类型,我们这里是text_ik,例:

    <field name="companyName" type="text_ik" indexed="false" stored="true" multiValued="false" />
    0 个人打赏
  • 相关阅读:
    .Net动态生成RDLC报表(二)
    Gridview动态绑定
    Javascript中escape(), encodeURI()和encodeURIComponent()之精析与比较
    Hashtable简单应用
    Gridview模板列中textbox 按Enter切换到下一个textbox
    DataTable两列转换四列
    一:怎样运行python程序
    三:python 对象类型详解一:数字(上)
    八:python 对象类型详解四:字典
    六:python 对象类型详解二:字符串(下)
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/11665934.html
Copyright © 2020-2023  润新知