簡體   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