小编Rin*_*nas的帖子

如何使Solr拼写检查器纠正拉丁语和西里尔语单词?

我允许用户用拉丁字母键入俄语单词.如果用户用拉丁字母拼错俄语单词,我希望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不).

任何想法,我如何使拼写检查器纠正西里尔字母和拉丁字样?

solr

7
推荐指数
1
解决办法
702
查看次数

Solr WordDelimiterFilter在查询中生成单词部分和catenate

我想查询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

4
推荐指数
1
解决办法
4204
查看次数

标签 统计

solr ×2