Lucene定制分析仪

时间:2012-01-26 08:14:35

标签: c# java .net lucene lucene.net

我正在使用Lucene制作搜索工作网站,并应对此类问题。我需要搜索C#,。net,所以我需要使用WhiteSpaceAnalyzer,但如果我使用它,搜索将是大小写的。

我怎样才能使这个案例不敏感?现在我看到只有一个解决方案是制作自己的分析器。但我是Lucene的新手,请你帮我一些代码示例。我做了一些我认为必须工作的东西,但事实并非如此。看看

public sealed class NewWhitespaceAnalyzer : Analyzer
    {
        public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
        {
            return new LowerCaseFilter(new WhitespaceTokenizer(reader));
        }

        public override TokenStream ReusableTokenStream(System.String fieldName, System.IO.TextReader reader)
        {
            Tokenizer tokenizer = (Tokenizer)GetPreviousTokenStream();
            if (tokenizer == null)
            {
                tokenizer = new WhitespaceTokenizer(reader);
                SetPreviousTokenStream(tokenizer);
            }
            else
                tokenizer.Reset(reader);
            return tokenizer;
        }
    }

如果你在这里看到错误,请纠正我。

如果您有任何其他建议,那么您将会成功。

感谢您的帮助, 迪马。

2 个答案:

答案 0 :(得分:3)

试试这个:

public sealed class NewWhitespaceAnalyzer : Analyzer
{
    public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
    {
        return new LowerCaseFilter(new WhitespaceTokenizer(reader));
    }

    public override TokenStream ReusableTokenStream(System.String fieldName, System.IO.TextReader reader)
    {
        SavedStreams streams = (SavedStreams) GetPreviousTokenStream();
        if (streams == null)
        {
            streams = new SavedStreams();
            SetPreviousTokenStream(streams);
            streams.tokenStream = new WhiteSpaceTokenizer(reader);
            streams.filteredTokenStream = new LowerCaseFilter(streams.tokenStream);
        }
        else
        {
            streams.tokenStream.Reset(reader);
        }
        return streams.filteredTokenStream;
    }
}

答案 1 :(得分:0)

有两点:

  • 也在LowerCaseFilter方法中使用ReusableTokenStream

  • 不要忘记在查询解析和文档索引中使用此自定义Analyzer

享受。