繁体   English   中英

Lucene定制分析仪

[英]Lucene custom analyzer

我正在使用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;
        }
    }

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

如有其他建议,欢迎您。

感谢您的帮助,迪玛。

尝试这个:

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;
    }
}

有2分:

  • ReusableTokenStream方法中也使用LowerCaseFilter

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

请享用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM