gpt4 book ai didi

java - Lucene搜索特殊字符

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:31 27 4
gpt4 key购买 nike

在我的 Lucene 索引中,我将带有特殊字符的名称(例如 Savić)存储在如下所述的字段中。

FieldType fieldType = new Field();
fieldType.setStored(true);
fieldType.setIndexed(true);
fieldType.setTokenized(false);<br>
new Field("NAME", "Savić".toLowerCase(), fieldType);

我使用 StopwordAnalyzerBase 分析器和 Lucene Version.LUCENE_45。

如果我在字段中精确搜索“savić”,则找不到它。如何处理特殊字符?

@Override
protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
PatternTokenizer src;
// diese Zeichen werden nicht als Trenner verwendet
src = new PatternTokenizer(reader, Pattern.compile("[\\W&&[^§/_&äÄöÖüÜßéèàáîâêûôëïñõãçœ◊]]"), -1);

TokenStream tok = new StandardFilter(matchVersion, src);
tok = new LowerCaseFilter(matchVersion, tok);
tok = new StopFilter(matchVersion, tok, TRIBUNA_WORDS_SET);

return new TokenStreamComponents(src, tok) {
@Override
protected void setReader(final Reader reader) throws IOException {
super.setReader(reader);
}
};

}

最佳答案

您有几个选择:

  1. 尝试添加 ASCIIFoldingFilter :

    src = new PatternTokenizer(reader, Pattern.compile("[\\W&&[^§/_&äÄöÖüÜßéèàáîâêûôëïñõãçœ◊]]"), -1);

    TokenStream tok = new StandardFilter(matchVersion, src);
    tok = new LowerCaseFilter(matchVersion, tok);
    tok = new ASCIIFoldingFilter(tok);
    tok = new StopFilter(matchVersion, tok, TRIBUNA_WORDS_SET);

    如果存在合理的 ASCII 替代字符,这将采用相当简单的方法来减少非 ASCII 字符(例如 Ä),使其与 ASCII 字符(在本例中为 A)最佳匹配。不过,尝试使用特定于语言的智能来确定最佳替代品,它不会做任何花哨的事情。

  2. 对于语言上更智能的东西,许多特定语言的包中都有处理此类事情的工具。 GermanNormalizationFilter就是一个示例,它将执行与 ASCIIFoldingFilter 类似的操作,但将以适合德语的方式应用规则,例如将“ß”替换为“ss”。您可以像上面的代码一样使用它:

    src = new PatternTokenizer(reader, Pattern.compile("[\\W&&[^§/_&äÄöÖüÜßéèàáîâêûôëïñõãçœ◊]]"), -1);

    TokenStream tok = new StandardFilter(matchVersion, src);
    tok = new LowerCaseFilter(matchVersion, tok);
    tok = new GermanNormalizationFilter(tok);
    tok = new StopFilter(matchVersion, tok, TRIBUNA_WORDS_SET);

关于java - Lucene搜索特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31563588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com