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