我允许用户用拉丁字母键入俄语单词.如果用户用拉丁字母拼错俄语单词,我希望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>
Run Code Online (Sandbox Code Playgroud)
它将查询转换为西里尔字母,因此俄语单词更正有效.但拉丁语没有.(tilevizor以?????????作品,但smasung以samsung不).
任何想法,我如何使拼写检查器纠正西里尔字母和拉丁字样?
我认为,可以提供帮助的解决方案是 Beider-Morse 语音匹配 (BMPM)
\n\n\n\n\n贝德莫尔斯语音匹配 (BMPM) 是一种“听起来相似”的工具,\n 您可以使用新的语音匹配系统进行搜索。
\n
因此,例如单词 \'tilevizor\' 和 \'\xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x80\ ' 听起来像这样,我们就会得到一个匹配。可以调整的是语音匹配算法。Solr正在支持其中很多,但我不确定哪一个性能更好:DoubleMetaphone、Metaphone、Soundex、RefinedSoundex、Caverphone (v2.0)、ColognePhonetic 或 Nysiis。
\n\n另外,我想solr.ICUTransformFilterFactory更新id="Russian-Latin/BGN"它可以更好地将俄语符号转换为拉丁符号。
<fieldType name="spell_ru" class="solr.TextField" positionIncrementGap="100" omitNorms="true">\n <analyzer type="query">\n <tokenizer class="solr.StandardTokenizerFactory"/>\n <filter class="solr.LowerCaseFilterFactory"/>\n <filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>\n <filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>\n </analyzer>\n <analyzer type="index">\n <tokenizer class="solr.StandardTokenizerFactory"/>\n <filter class="solr.LowerCaseFilterFactory"/>\n <filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>\n <filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>\n </analyzer>\n </fieldType>\nRun Code Online (Sandbox Code Playgroud)\n\n上面的 fieldType 在很多情况下都可以解决问题,例如
\n\nq=title:tilevizor\nSolrDocument{title=\xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x80 samsung, _version_=1583123812650582016}\nSolrDocument{title=televizor \xd1\x81\xd0\xb0\xd0\xbc\xd1\x81\xd1\x83\xd0\xbd\xd0\xb3, _version_=1583123812667359232}\n\nq=title:\xd1\x82\xd0\xb8\xd0\xbb\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x80\nSolrDocument{title=\xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x80 samsung, _version_=1583123812650582016}\nSolrDocument{title=televizor \xd1\x81\xd0\xb0\xd0\xbc\xd1\x81\xd1\x83\xd0\xbd\xd0\xb3, _version_=1583123812667359232}\n\nq=title:smasung\nSolrDocument{title=\xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x80 samsung, _version_=1583123812650582016}\nSolrDocument{title=televizor \xd1\x81\xd0\xb0\xd0\xbc\xd1\x81\xd1\x83\xd0\xbd\xd0\xb3, _version_=1583123812667359232}\nSolrDocument{title=\xd0\xb3\xd1\x8d\xd0\xbb\xd0\xb0\xd0\xba\xd1\x81\xd0\xb8 samsung, _version_=1583123812684136448}\nSolrDocument{title=galaxy \xd1\x81\xd0\xb0\xd0\xbc\xd1\x81\xd1\x83\xd0\xbd\xd0\xb3, _version_=1583123812684136449}\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里创建了以下测试类,请随意使用这个测试类。
\n| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |