2015-02-24 72 views
0

我當前在模式中的字段類型目前被定義爲僅進行精確匹配;Solr中沒有特殊字符的完全匹配

<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.TrimFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.TrimFilterFactory"/> 
     </analyzer> 
    </fieldType> 

現在,我想要實現完全匹配,但在索引過程中會刪除特殊字符。

我讀過使用StandardTokenizerFactory會刪除特殊字符。但是,我不希望它在白色空間上分割短語的副作用。

是否有可能在索引期間執行StandardTokenizerFactory,然後在查詢KeywordTokenizerFactory中使用?

還有其他想法嗎?

+0

KeywordTokenizerFactory不應刪除任何特殊字符,您能不能給實例的一些你正在使用索引/搜索的價值觀? – Emad 2015-02-25 06:22:23

+0

我試圖否定所有特殊字符,除了我正在替換的&和@之外。 – user3286012 2015-02-25 14:36:00

回答

1

你可以使用CharFilterFactories從Solr的,因爲你有可能適合工廠:

solr.HTMLStripCharFilterFactory:它會刪除所有的HTML特殊字符,如<,>,&等

solr.PatternReplaceCharFilterFactory:它會取代所有的字符,你可以使用它像正則表達式:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-z])" replacement=""/> 

它將刪除所有非字母字符,與此類似,您可以刪除所有特殊字符。

欲瞭解更多信息 - https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#CharFilterFactories

+0

謝謝。看起來像PatternReplaceCharFilterFactory解決了它。我昨天正在修補,下面的配置做到了。 user3286012 2015-02-25 14:33:57

+0

使用PatternReplaceCharFilterFactory,我現在可以使用AT替換&與ANd和@。我目前正在試圖找到正確的正則表達式配置來刪除使用PatternReplaceFilterFactory的其他特殊字符。我試圖指示過濾器刪除除a-z,&,@之外的任何字符。 – user3286012 2015-02-25 14:40:43