2011-10-05 79 views
0

我有一個字段,我希望將其視爲單個字符串,同時從中剝離所有非字母數字字符。如何在使用hibernate search/lucene進行索引期間去除空格和特殊字符

例如,我想將「123 456.78-9」標記爲「123456789」。爲了做到這一點,我一直在試圖定義我自己的分析儀。根據solr頁面KeywordTokenizerFactory會將字符串視爲一個單詞,我可以使用PatternReplaceFilterFactory按照我的意圖刪除字符。

我用我的代碼中使用以下定義,它不工作:

@AnalyzerDef(name = "strippinganalyzer", 
    tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class), 
    filters = { 
      @TokenFilterDef(factory = PatternReplaceFilterFactory.class, 
        params = { 
         @org.hibernate.search.annotations.Parameter(name = "pattern", value="([^a-zA-Z0-9])"), 
         @org.hibernate.search.annotations.Parameter(name="replacement", value=""), 
         @org.hibernate.search.annotations.Parameter(name="replace", value="all") 
        } 
      ) 
    }) 

這符合「123 *」,而不是「1234 *」等等。我缺少什麼?

感謝

回答

3

創建自定義的分析,似乎這樣的伎倆:

public class AlphanumericAnalyzer extends Analyzer { 

    @Override 
    public TokenStream tokenStream(String fieldName, Reader reader) { 

     return new TrimFilter(new PatternReplaceFilter(new LowerCaseFilter(new KeywordTokenizer(reader)), Pattern.compile("[^a-zA-Z0-9]"), "", true), true); 
    } 
}