2012-11-20 64 views
3

我們使用Solr 3.6來索引文檔集合(DBLP)。一些文件的元數據是德文的。爲了處理變音和重音,我們使用ASCIIFoldingFilterFactory(請參閱schema.xml)。使用Solr處理變音符號和重音符號

title:Unterstutzung幾個搜索結果返回但是title:Unterstützung搜索時,沒有結果,即便是有,在他們的標題字段有Unterstützung文件。

在管理Web界面中使用分析器顯示查詢字詞和文檔字詞按照預期進行索引和處理。但是當查詢中出現變音時,爲什麼我們沒有得到結果呢?

在schema.xml中爲標題字段定義:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
        <analyzer type="index"> 
          <charFilter class="solr.HTMLStripCharFilterFactory"/> 
          <tokenizer class="solr.StandardTokenizerFactory"/> 
          <filter class="solr.ASCIIFoldingFilterFactory"/> 
          <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" preserveOriginal="1"/> 
          <filter class="solr.LowerCaseFilterFactory"/> 
          <filter class="solr.EnglishPorterFilterFactory"/> 
          <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        </analyzer> 
        <analyzer type="query"> 
          <tokenizer class="solr.StandardTokenizerFactory"/> 
          <filter class="solr.ASCIIFoldingFilterFactory"/> 
          <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/> 
          <filter class="solr.LowerCaseFilterFactory"/> 
          <filter class="solr.EnglishPorterFilterFactory"/> 
          <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        </analyzer> 
      </fieldType> 

全schema.xml中:http://pastebin.com/rQDw30nA

分析器輸出兩個文檔和查詢中Unterstützunghttp://pastebin.com/6cxSnGwP(在查詢的處理的術語unterstutzung被突出顯示)

+0

你怎麼搜索?也許客戶端的編碼會改變你期望的行爲? –

+0

我正在使用Solr管理Web界面和SolrJ Java API進行搜索。 – problemzebra

+0

也檢查http://stackoverflow.com/questions/9290905/solr-tomcat-utf-8/9293107#9293107 – Jayendra

回答

1

我在一年前遇到了與Solr 1.4類似的問題,我並不完全知道,如果它可以爲你工作了,但使用映射過濾器可以幫助你的是,除了ASCII摺疊,有相關的部分從我的架構

<analyzer type="index">^M 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>^M 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>^M 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>^M 
    <filter class="solr.LowerCaseFilterFactory"/>^M 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>^M 
</analyzer>^M 
<analyzer type="query"> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
</analyzer> 

映射文件就是一個文本文件中有mappins像'unicode' => 'Mapped char'你可以找到大量的依賴於對谷歌的語言的例子...

我希望它能幫助

+0

感謝您的想法,但這只是Tomcat的一個簡單的問題。 – problemzebra