使用StemmerOverrideFilterFactory和SnowballPorterFilterFactory为荷兰语无法正确分析Word

时间:2014-03-17 10:21:38

标签: solr porter-stemmer solr-query-syntax snowball

Solr: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

它应该依赖于&#39; etiket&#39;。然而,除了它回归&#39; etik&#39;。当我分析我的领域时,SOLR返回:

etiketje
etiketje
etiketje
etiketje
etik

我希望SOLR能够分析Etiketje&#39;为:

etiketje
etiket

希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分: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"/>

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