我继承了一个使用Lucene 4.6.0搜索xml文档的项目。
基本上我的问题似乎是:
搜索包含"otherwise authorized as such"
的文本字段的文档会在搜索任何单词时返回突出显示的文档,但如果
文本字段包含"[otherwise authorized as such]"
之类的内容,然后只搜索“已授权”返回结果。
我猜lucene因为方括号而没有看到"[otherwise"
和"such]"
作为单词?
不是一个lucene专家,即使有文档,我仍然坚持这一点。有没有办法自定义分析器以包含“[”作为单词搜索的一部分?
由于
答案 0 :(得分:0)
您不需要手动删除错误的字符,您应该编写自定义Analyzer
,它将使用PatternReplaceCharFilter,这可能会删除不需要的符号。
这个分析器的例子是这样的:
class CustomAnalyzer extends Analyzer {
@Override
protected Reader initReader(String fieldName, Reader reader) {
CharFilter cf = new PatternReplaceCharFilter(Pattern.compile("\\["), "", reader);
cf = new PatternReplaceCharFilter(Pattern.compile("\\]"), "", cf);
cf = new PatternReplaceCharFilter(Pattern.compile("\\)"), "", cf);
cf = new PatternReplaceCharFilter(Pattern.compile("\\("), "", cf);
return cf;
}
@Override
protected TokenStreamComponents createComponents(String fieldName) {
final StandardTokenizer analyzer = new StandardTokenizer();
TokenStream tok = new StandardFilter(analyzer);
tok = new LowerCaseFilter(tok);
return new TokenStreamComponents(analyzer, tok);
}
}
我在这里选择仅替换''符号。
在此索引时间过滤后,您将能够正常搜索。
代码的完整示例位于here