2013-01-12 49 views
2

對於我的solr實現,我希望查詢返回帶有和不帶有變音符號的單詞,無論您使用或不使用變音符號進行搜索。Solr在用變音符號搜索時發現沒有變音符號的單詞,但不是用其他方式搜索

舉個例子

的搜索詞是 「CEST」 - Solr的返回: 'CEST', 'CEST' 和 'CEST CA' 的搜索詞是「CEST「 - Solr的返回: 'CEST', 'CEST' 和 'CEST CA'

目前第一部作品。當我搜索「çest」時,它會返回cest和çest。然而,當我搜索「CEST」它只返回「CEST」

這是它的外觀在我的架構:

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\W+" replacement="-"/> 
     <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

有沒有辦法讓它工作兩者兼得?

回答

1

如果您想要匹配,則不需要solr.PatternReplaceCharFilterFactory。 這將在傳遞給ASCII過濾器之前刪除特殊字符。

您可以使用: -

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
    </analyzer> 
</fieldType> 

你也可以使用一個空白標記生成器有令牌和使用小寫的過濾器。

此外,請記住執行的順序在分析如下,順序的irespective您有: -

  • CharFilters
  • 標記者
  • 過濾器
+0

感謝您的支持! :-) –

0

推薦答案從來沒有爲我工作,而不得不使用這個:

<fieldType name="text_special_search" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/> 
    </analyzer> 
</fieldType>  

您也可以使用您的solr版本提供的映射文件或使用下面鏈接的映射文件 https://github.com/lmjabreu/solr-conftemplate/blob/master/mapping-ISOLatin1Accent.txt