同义词:搜索结果里出现的同义词。如咱们输入”还行”,获得的结果包括同义词”还能够”。web
中止词:在搜索时不用出如今结果里的词。好比is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中屡次出现却无心义,因此在分词的时候须要把这些词过滤掉。tomcat
扩展词:在搜索结果里额外出现的词。扩展词只能是你输入词的自己或子串。好比咱们 输入”重庆开县人”,正常分词获得的结果是“重庆” “开县”“人”;当咱们在扩展词里加入“重庆开县”时,分词的结果是“重庆开县”“重庆” “开县”“人”。markdown
1.在solr_home的conf目录下的schema.xml 中配置同义词text_syn:app
<!-- 配置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”webapp
<field name="shortName" type="text_syn" indexed="true" stored="true" />
3.在conf目录下的 synonyms.txt 中增长同义词,如:post
这里我多说两句:上面红框里的 => 右侧的词是左侧词的同义词,多个时用空格隔开。还有就是,最好不要直接打开synonyms.txt这个文件,由于加入的汉字在保存后会查不出来,由于txt不是UTF-8的格式保存的。测试
4.测试同义词spa
输入高兴:
输入中华:
5.基于上面的问题,说下怎么解决,毕竟不论咱们输入中华仍是中国,都能有对应的同义词结果。code
首先,咱们将synonyms.txt里的同义词用英文逗号隔开,而后将上面配置IK同义词里的expand属性设为true。xml
咱们输入:大大的,结果以下:
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" />