2013-06-18 73 views
1

我已閱讀有關如何在索引/查詢時間刪除重音的各種線程。當前的字段類型我都拿出瞭如下所示:Solr口音刪除

<fieldType name="text_general" class="solr.TextField">  
    <analyzer> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer>  
</fieldType> 

已經增加了幾個測試信息索引後,我已經通過已生成的種類的記號http://localhost:8080/solr/test_core/admin/luke?fl=title

檢查。 例如像「拜仁慕尼黑」一個標題已被標記化成:

<int name="bayern">1</int> 
<int name="m">1</int> 
<int name="nchen">1</int> 

因此代替由它的ASCII掛件替換字符的,它一直是解釋爲是定界符?有這樣一種指數的結果,我既不能搜索「慕尼黑」也不慕尼黑。

任何想法如何解決? 在此先感謝。

回答

7

問題是您在應用ASCIIFoldingFilterFactory之前應用StandardTokenizerFactory。相反,您應該首先使用MappingCharFilterFactory字符過濾器工廠,並使用StandardTokenizerFactory

作爲每Solr Reference guideStandardTokenizerFactory支持<ALPHANUM>, <NUM>, <SOUTHEAST_ASIAN>, <IDEOGRAPHIC>, and <HIRAGANA>。因此,當使用StandardTokenizerFactory進行標記時,變音符將丟失,此後ASCIIFoldingFilterFactory無用。

你的fieldType應該如下,如果你想要去StandardTokenizerFactory

<fieldType name="text_general" class="solr.TextField">  
    <analyzer> 
      <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer>  
</fieldType> 

mapping-ISOLatin1Accent.txt應該有這種「特殊」字符的映射。在Solr中,此文件默認預先填充。對於例如ü -> ueä -> ae

+0

感謝您的回答。然而,MappingCharFilterFactory似乎沒有被應用。我通過post.jar更新索引,發送一個json文件,其內容將被添加到索引中。因爲我已經用WhitespaceTokenizerFactory替換了Standardtokenizer,所以這些字符串不會被重音符號化,但也不會被映射-ISOLatin1Accent.txt的內容所取代。 – user2148322

+0

如果您使用的是WhitespaceTokenizerFactory,那麼您可以使用ASCIIFoldingFilterFactory。與您的問題中的fieldType類似,只需使用WhitespaceTokenizerFactory替換StandardTokenizerFactory即可。 – JHS

+0

我確實已應用於標題字段和content_type字段的不同字段類型,一方面具有MappingCharFilterFactory,另一方面具有ASCIIFoldingFilter。這兩個變化仍然無法正常工作。 HTTP://本地主機:8080/solr的/ test_core /管理/盧克FL =標題,CONTENT_TYPE 1 在CONTENT_TYPE字段和 1 for title field(with lowercasefilter) – user2148322