【问题标题】:How to strip spaces and special characters during indexing with hibernate search / lucene如何在使用休眠搜索 / lucene 进行索引时去除空格和特殊字符
【发布时间】:2011-12-01 17:53:48
【问题描述】:

我有一个字段,我想将其视为单个字符串,同时从中删除所有非字母数字字符。

例如,我想将“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*”等。我错过了什么?

谢谢

【问题讨论】:

    标签: java regex lucene indexing hibernate-search


    【解决方案1】:

    创建自定义分析器似乎可以解决问题:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多