0

索尔:3.5

你好,

我根据以下 fieldType 定义创建了一个荷兰语字段类型:

    <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" preserveOriginal="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StemmerOverrideFilterFactory" words="lang/stemdict_nl.txt"  ignoreCase="true"/>
            <filter class="solr.SnowballPorterFilterFactory" language="Kp" words="lang/stemdict_nl.txt"/>
        </analyzer>
    </fieldType>

stemdict_nl.txt 根据http://snowball.tartarus.org/algorithms/kraaij_pohlmann/stemmer.html算法使用 45710 字规则。

大多数搜索查询似乎都运行良好,我得到的建议大多是正确的。

但是,当我搜索“etiketje”时出现问题。根据我的规则:

etiket                        etiket
etiketten                     etiket
etiketteren                   etiketteer
etikettering                  etiketteer
etiketje                      etiket

它应该回退到“etiket”。但是它回退到'etik'。当我分析我的领域时,SOLR 返回:

etiketje
etiketje
etiketje
etiketje
etik

我希望 SOLR 将“Etiketje”分析为:

etiketje
etiket

希望这里有人可以指出我正确的方向。

4

1 回答 1

0

尝试将您的定义更改为wiki上显示的确切语法,即更改

<filter class="solr.StemmerOverrideFilterFactory" 
        words="lang/stemdict_nl.txt"  ignoreCase="true"/>
<filter class="solr.SnowballPorterFilterFactory" 
        language="Kp" words="lang/stemdict_nl.txt"/>

<filter class="solr.StemmerOverrideFilterFactory" 
        dictionary="lang/stemdict_nl.txt"/>
<filter class="solr.SnowballPorterFilterFactory" 
        language="Kp"/>

您不需要ignoreCase=true在 StemmerOverrideFilter 上,因为无论如何您在该过滤器之前使用的是 LowerCaseFilter。

于 2014-03-19T01:38:18.067 回答