Lucene GermanAnalyzer以不同的方式对待不同的输入

时间:2013-06-13 09:49:05

标签: character-encoding lucene

我遇到GermanAnalyzer的问题。我只是为了寻找名字而需要它。 假设我的表格中有文件{“Muller”,“Mueller”,“Müller”}。 现在,如果我使用

    Analyzer analyzer = new GermanAnalyzer(Version.LUCENE_43);
    String querystr = "Muller~0.1"
    Query q = new QueryParser(Version.LUCENE_43, "Name", analyzer).parse(querystr);

它expectedky返回所有文件。但是当我尝试

    String querystr = "Müller~0.1"

    String querystr = "Mueller~0.1"

它不会返回任何内容。我不知道我是否遗漏了某些东西,或者它是否是一个错误。我不认为编码是问题所在,因为在搜索“Mueller”时,只有正常的字符在使用中。任何评论表示赞赏。

1 个答案:

答案 0 :(得分:0)

我通过使用GermanNormalizationFilter(String string)规范化搜索到的字符串来解决它。

    public static List<String> tokenizeString(String string) throws IOException {
        List<String> result = new ArrayList<String>();
        Tokenizer source = new StandardTokenizer(version, new StringReader(string));
        TokenStream stream = new StandardFilter(version, source);
        stream = new GermanNormalizationFilter(stream);
        CharTermAttribute cattr = stream.addAttribute(CharTermAttribute.class);
        stream.reset();
        while (stream.incrementToken()) {
            result.add(cattr.toString());
        }
        return result;
    }