2012-10-02 55 views
1

有一個solr配置爲法語內容。搜索很好,但是當我激活facet搜索時,單詞被以特殊方式截斷。索爾方面搜索截斷詞

所有電子郵件消失,對於如AUTOMOBIL,而不是汽車,montagn而不是涅,STYL而不是風格,HOMM => HOMME等....

<lst name="keywords"> 
    <int name="automobil">1</int> 
    <int name="citroen">1</int> 
    <int name="minist">0</int> 
    <int name="polit">0</int> 
    <int name="pric">0</int> 
    <int name="shinawatr">0</int> 
    <int name="thailand">0</int> 
</lst 

這裏是查詢q = fulltextfield:champpions &面=真& facet.field =關鍵字

關鍵字內容:

<arr name="keywords"> 
    <str>Ski</str> 
    <str>sport</str> 
    <str>Free style</str> 
    <str>automobile</str> 
    <str>Rallye</str> 
    <str>Citroen</str> 
    <str>montagne</str> 
</arr> 

這裏是架構中使用:

<fieldtype name="text_fr" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_fr.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" /> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="French"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_fr.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" /> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="French"/> 
    </analyzer> 
</fieldtype> 

領域DEF:

如果有人有關於這個問題的想法....

謝謝您的回答。 關於 Jerome longet

+1

這是因爲制止。 –

回答

4

一般來說,如果你想使用一個字段作爲一個方面,它應該被存儲爲一個字符串。

您正在使用標記和過濾字段,因此各個值是關鍵字字段中處理的字詞。

+1

......並且爲了進一步擴大,「政治」是一個預測搜索「禮貌」,「政治」,「政治化」甚至是荒謬的「政治」的詞幹!這個過程與法語相似。因此,使用'''''''''''''' – aitchnyu

+0

好的,謝謝,我會複製一個文本框。 – user1715390

+0

這回答了這個問題,應該標記爲答案 - 我遇到了同樣的問題,並設置了一個字符串字段來解決問題。 –

1

以上所說的都是正確的,我只想添加一個方面。構面值是索引項,而不是存儲的值。一個方面的建議是使用字符串類型。這通常是一個不錯的選擇。但是有時候你想對你的某些方面有所瞭解。在這種情況下,您可以使用文本類型,但只能輕鬆處理輸入。在任何情況下都要避免使用Stemming(SnowballPorter)或WordDelimiter的上述選項。

開始的一個好選擇是KeywordTokenizerFactory,您可以使用PatternReplace清理您的術語和輸入,並在最後執行TrimFilter。如果您的用戶要查看條款,請勿進行縮小。

例如,我的輸入是字母語言代碼。該PatternReplace清理非字母字符,第二個正確的輸入錯誤:

`

<analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.PatternReplaceFilterFactory" 
      pattern="([^a-z])" 
      replacement="" 
      replace="all" /> 
    <filter class="solr.PatternReplaceFilterFactory" 
      pattern="fer|xxx" 
      replacement="und" 
      replace="all" /> 
    <filter class="solr.LengthFilterFactory" min="3" max="3" /> 
    </analyzer> 

`

與Solr的樂趣

奧利弗