使用Lucene电话号码分析器问题进行Hibernate搜索

时间:2017-11-29 14:43:29

标签: lucene hibernate-search

我们的数据库包含各种格式的数千个数字,我尝试做的是在索引时删除所有标点符号并仅存储数字,然后当用户在关键字字段中键入数字时,只匹配这些数字。我认为自定义分析仪是可行的,但我认为我错过了一个重要的步骤......

@Override
protected TokenStreamComponents createComponents(String fieldName) {

    log.debug("Creating Components for Analyzer...");
    final Tokenizer source = new KeywordTokenizer();
    LowerCaseFilter lcFilter = new LowerCaseFilter(source);
    PatternReplaceFilter prFilter = new PatternReplaceFilter(lcFilter,
            Pattern.compile("[^0-9]"), "", true);
    TrimFilter trimFilter = new TrimFilter(prFilter);
    return new TokenStreamComponents(source, trimFilter);
}

...

@KeywordSearch
@Analyzer(impl = com.jjkane.common.search.analyzer.PhoneNumberAnalyzer.class)
@Field(name = "phone", index = org.hibernate.search.annotations.Index.YES, analyze = Analyze.YES, store = Store.YES)
public String getPhone() {
    return this.phone;

}

这可能只是我无法尝试这样做...从所有文档中,似乎我在正确的轨道上,但查询永远不会匹配,除非我提交(555)555-5555作为与我的数据库中的内容完全匹配。如果我输入5555555555,我什么都没得到......

0 个答案:

没有答案