2011-10-05 80 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); 
    } 
}