我允许用户用拉丁字母键入俄语单词.如果用户用拉丁字母拼错俄语单词,我希望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不).
任何想法,我如何使拼写检查器纠正西里尔字母和拉丁字样?
我想查询wi-fi来匹配索引中带有wifi的文档.所以,我正在使用solr.WordDelimiterFilterFactory来查询查询中的单词:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
但使用此配置查询LGA1155与LGA 1155不匹配,因为查询标题:LGA1155被解析为:(标题:lga标题:1155标题:lga1155)~3
如果我没有在查询中输入单词,LGA1155会匹配LGA 1155,因为查询被解析为:( 标题:标题:1155)~2.但是那时wi-fi与wifi不匹配.
我正在使用edismax查询解析器,q.op是AND.Solr版本:4.5.
那么,如何使wi-fi匹配wifi …
solr ×2