2010-02-09 34 views
2

我正在使用solr的faceting,並且遇到了一個問題,我希望能夠避開使用過濾器。ToTitleCase solr停止Solr中的尖叫蓋子

基本上有時候一個小鎮的名字將通過來SOLR作爲

「再別康橋」

並且有時是它會通過爲

「劍橋」

我想用一個在Solr中過濾以停止鎮名的SCREAMING CAPS版本。似乎有一個適合所有的文字lower case

<!-- A text field that only sorts out casing for faceting --> 
    <fieldType name="text_facet" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

我想知道是否有人知道一個過濾器會忽略一個單詞的第一個字母和小寫應用的字符的其餘部分。例如。

  • CAMBRIDGE >>劍橋
  • 赫爾>>赫爾

或者,如果它很容易寫自己的過濾..如何做一些幫助將不勝感激。我不是一個Java的人..

感謝

回答

2

AFAIK沒有像這樣的內置過濾器。如果你想寫它,請參閱LowerCaseFilterFactoryLowerCaseFilter以供參考,它似乎不是很難。

或者您可以在客戶端執行此操作,即在SolrNet中,您可以使用ToTitleCase編寫一個ISolrOperations裝飾器,在真正的查詢後執行必要的轉換。

+0

我用一個很老的版本的SolrNet ..所以我會看到,如果我可以使用ISolrOperations。然而,我認爲它可能是時間來學習Java ..我知道C#所以語法不應該是一個問題..謝謝Mauricio – CraftyFella

+1

ISolrOperations從修訂1 :-)無論如何,我建議升級到最新版本.. –

+0

不錯,我會去做。 – CraftyFella

1

也許你可以使用solr.PatternReplaceCharFilterFactory?

<fieldType name="textCharNorm" class="solr.TextField"> 
    <analyzer> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="([^\s]{1})([^\s]*)" replaceWith="\U$1\L$2"/> 
    </analyzer> 
</fieldType> 

請注意,我沒有測試代碼或solr.PatternReplaceCharFilterFactory,所以我不確定它是否有效。如果你需要建立自己的過濾器這個指南可能是有用的:

http://robotlibrarian.billdueber.com/building-a-solr-text-filter-for-normalizing-data/

//約翰

+0

謝謝..我會檢查出來。 – CraftyFella