我编写了一个自定义分析器,该分析器使用ASCIIFoldingFilter来将位置名称中的扩展拉丁设置减少为常规拉丁。
public class LocationNameAnalyzer extends Analyzer {
@Override
public TokenStream tokenStream(String arg0, Reader reader) {
//TokenStream result = new WhitespaceTokenizer(Version.LUCENE_36, reader);
StandardTokenizer tokenStream = new StandardTokenizer(Version.LUCENE_36, reader);
TokenStream result = new StandardFilter(tokenStream);
result = new LowerCaseFilter(result);
result = new ASCIIFoldingFilter(result);
return result;
}
}
我知道现在到处都是弃用的东西,但是稍后我会更正。我现在的问题是,当我使用此分析器时,我能够使用标准拉丁语查找结果,但是在搜索原始名称时却找不到。
例如:“慕尼黑”带给我与慕尼黑相关的搜索结果,但“慕尼黑”不再带给我。
我假设在我的情况下,ASCIIFoldingFilter会简单地覆盖流中的字符,所以问题是如何将两个流(普通的和拉丁折叠的流)加在一起
最佳答案
您应该在分析器和搜索器上都使用过滤器,这样,用于搜索的令牌将与存储在索引中的令牌相同。