这是我第一次在solr中使用同义词并且一直在阅读它以尝试理解如何使用它。虽然同义词工厂有很多文档及其工作方式,但我对如何开始找不到多少。 所以,我开始使用它来修改synonyms.txt文件并添加一行像
mba => master business administration
并定义了字段' degree' as text_en_splitting_tight默认情况下使用同义词过滤器工厂。
当我在' degree'中搜索单词mba时,我希望它将输入转换为主业务管理,然后将其与我的索引中的条目匹配,这是不会发生的。但是当我在查询段中的solr的分析器页面上尝试它时,似乎正在为两个程度进行正确的转换。和' text_en_splitting_tight'。
如果这个问题过于业余,请不要介意,但我真的很难找到解决方法。如果我错过了一些重要的步骤,请随时批评。
编辑: 添加下面的schema.xml部分
<field name="candDegree" type="text_en_splitting_tight" indexed="true" stored="true" multiValued="true"/>
<field name="candStream" type="text_en_splitting_tight" indexed="true" stored="true" multiValued="true"/>
编辑2: Field类型分析器如下所示:
<fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
possible with WordDelimiterFilter in conjuncton with stemming. -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
“synonyms.txt”是这样的:
mba => master business administration
mcom => master commerce
me,mtech,ms => master engineering
mit,mca => master information technology
ma => master humanities
bba,bbm => bachelor business administration
bcom => bachelor commerce
be,btech => bachelor engineering
bca,bit => bachelor information technology
ba => bachelor humanities