我允许用户用拉丁字母键入俄语单词。如果用户在拉丁字母中拼错了俄语单词,我希望Solr拼写检查器用西里尔字母表示正确的单词(索引中的俄语单词以西里尔字母表示)。但是,如果用户拼写错误而不是俄语单词(例如商标名称),则应该用拉丁文字母对其进行更正(索引中的俄语单词不在拉丁文中)。
例如,应该将tilevizor smasung修复为телевизор samsung
现在我使用以下配置:
<fieldType name="spell_ru" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Any-Cyrillic; NFD; [^\p{Alnum}] Remove" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="256" />
</analyzer>
</fieldType>它将查询转换为西里尔字母,因此俄语单词的更正工作。但拉丁语不起作用(tilevizor to телевизор,smasung to samsung不起作用)。
任何想法,我如何使拼写检查,以纠正西里尔词和拉丁词?
发布于 2017-11-04 08:41:49
我认为,这个解决方案,可以帮助这里是拜德尔-摩尔斯拼音匹配(BMPM)。
拜德尔-莫尔斯语音匹配(BMPM)是一个“声音相似”的工具,可以让你搜索使用一个新的语音匹配系统。
因此,例如,单词'tilevizor‘和'телевизор’将听起来很相似,我们将得到一个匹配。可以调整的是语音匹配的算法。Solr是支撑性中的很多,我不知道哪个会更好: DoubleMetaphone、Metaphone、Soundex、RefinedSoundex、Caverphone (v2.0)、ColognePhonetic或Nysiis。
另外,我想用solr.ICUTransformFilterFactory更新id="Russian-Latin/BGN",它能更好地将俄罗斯符号转换为拉丁语符号。
<fieldType name="spell_ru" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>
<filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>
<filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>
</analyzer>
</fieldType>上面的fieldType在很多情况下都能做到这一点,例如
q=title:tilevizor
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}
q=title:тилевизор
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}
q=title:smasung
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}
SolrDocument{title=гэлакси samsung, _version_=1583123812684136448}
SolrDocument{title=galaxy самсунг, _version_=1583123812684136449}我已经创建了下面的测试类这里,可以随意使用这个类。
https://stackoverflow.com/questions/20350714
复制相似问题