Lucene 不敏感的空白分析器?

发布于 2024-10-13 09:18:53 字数 327 浏览 8 评论 0原文

我使用 lucene 进行搜索,对于标签,我使用空白分析器。看起来它存储得很好。使用标准分析器,我的“C#”搜索将产生 C、C++ 的结果。我尝试过的每个分析器(我没有尝试过所有)都会这样做,除了空白分析器。这很好,除非我搜索 c# 我没有得到任何结果(我使用小写 C 而不是大写)。如果我搜索诸如“Lucene 不敏感空白分析器?”之类的标题,这会很烦人。当它恰好是“Lucene 不敏感空白分析器?”时。 (请注意,前 3 个单词以 upper 开头,最后一个单词与我的搜索中一个 upper 和 all lower 的搜索结果不同)。

如何制作不敏感的空白分析器?注意:WhitespaceAnalyzer 是密封的。

I am using lucene for searching and with tags i use the whitespace analyzer. It looks like its stored properly. With standard analyzer my 'C#' search will yield results for C, C++. Every analyzer i tried (i havent tried all) does this except for whitespace analyzer. This is fine except if i search c# i get no results (i'm using a lowercase C instead of uppercase). This is annoying if i search a title such as "Lucene insensitive whitespace analyzer?" when it happens to be "Lucene Insensitive Whitespace analyzer?". (Note the first 3 words start with upper and the last doesnt compared to my search with one upper and all lower).

How do i make an insensitive whitespace analyzer? Note: WhitespaceAnalyzer is sealed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

十年不长 2024-10-20 09:18:53

您可以创建一个自定义分析器,如下所示(以 Lucene 版本 4.10.4 为例),

import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;

public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
    @Override
    protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
            Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
            TokenStream filter = new LowerCaseFilter(tokenizer);
            return new TokenStreamComponents(tokenizer, filter);
    }
}

并且您可以在索引时使用该分析器来配置索引编写器,并在搜索时使用它来创建查询解析器。

You can create a custom analyzer as below (for Lucene version 4.10.4 as an example)

import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;

public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
    @Override
    protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
            Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
            TokenStream filter = new LowerCaseFilter(tokenizer);
            return new TokenStreamComponents(tokenizer, filter);
    }
}

And you can use the analyzer to config your index writer when indexing, and also use it to create your query parser when searching.

冰魂雪魄 2024-10-20 09:18:53
class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        var tokenizer = new WhitespaceTokenizer(reader);
        var lowercaseFilter = new LowerCaseFilter(tokenizer);

        return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
    }
}

这是一个非常适合我的用例的 C# 版本。

class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        var tokenizer = new WhitespaceTokenizer(reader);
        var lowercaseFilter = new LowerCaseFilter(tokenizer);

        return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
    }
}

Here's a C# version that works well for my use case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文