我编写了一个自定义分析器,该分析器使用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会简单地覆盖流中的字符,所以问题是如何将两个流(普通的和拉丁折叠的流)加在一起

最佳答案

您应该在分析器和搜索器上都使用过滤器,这样,用于搜索的令牌将与存储在索引中的令牌相同。

08-08 01:36