學習Lucene.net(二)

幾種分析器的差別展現:html

  學習了birdshover的博客學習

 private void button3_Click(object sender, EventArgs e)
        {
            string testwords = "我是中國人,I can speak chinese!";

            List<Analyzer> analysis = new List<Analyzer>() { 
               new KeywordAnalyzer(),
                new SimpleAnalyzer(),
                new StandardAnalyzer(Version.LUCENE_CURRENT),
                new StopAnalyzer(Version.LUCENE_CURRENT),
                new WhitespaceAnalyzer() };
            //SimpleAnalyzer simple = new SimpleAnalyzer();
            //StandardAnalyzer simple = new StandardAnalyzer(Version.LUCENE_CURRENT);
            //WhitespaceAnalyzer 僅僅是去除空格,對字符沒有lowcase化,不支持中文; 而且不對生成的詞彙單元進行其餘的規範化處理。 SimpleAnalyzer 功能強於WhitespaceAnalyzer, 首先會經過非字母字符來分割文本信息,而後將詞彙單元統一爲小寫形式。該分析器會去掉數字類型的字符。
            for (int i = 0; i < analysis.Count; i++)
            {
                TokenStream ts = analysis[i].ReusableTokenStream("", new System.IO.StringReader(testwords));
                ITermAttribute termAtt = ts.GetAttribute<ITermAttribute>();
                //TermAttribute termAtt = (TermAttribute)ts.GetAttribute<ITermAttribute>();
                string message = "";
                while (ts.IncrementToken())
                {
                    message += termAtt.Term + "-";
                }
                MessageBox.Show(analysis[i].GetType().ToString() + "" + message);
                ts.Close();
            }
            
        }

關於Token, TokenStream, Tokenizer, Analyzer,轉載自http://blog.csdn.net/wxwzy738/article/details/8098712,原文地址:http://ybzshizds.iteye.com/blog/562794spa

Token: 若是一個字段被token化,這表示它通過了一個可將內容轉化爲tokens串的分析程序。 Token是創建索引的基本單位,表示每一個被編入索引的字符。 在token化的過程當中,分析程序會在使用任何轉換邏輯(例如去掉 "a」 或 "the" 這類停用詞,執行詞幹搜尋,將無大小寫區分的全部文字轉換成小寫等)的同時,抽取應被編入索引的文本內容。因爲和字段相關的內容減小到只剩核心元素,所以,索引做爲與某個字段相關的文字內容,它的規模也被縮小了。只有被token化的字段也將被編入索引的狀況下才有意義。 對Akamai.com來講,「標題」被token化,因此Lucene不用搜尋如 "a" 或 "the" 這類單詞。.net

TokenStream是用來走訪Token的iterator(迭代器) code

Tokenizer繼承自TokenStream,其輸入爲Readerhtm

TokenFilter繼承自TokenStream,其做用是用來完成對TokenStream的過濾操做,譬如 
去StopWords,將Token變爲小寫等blog

Analyzer就是一個TokenStream工廠 繼承

Analyzer的做用就是把文本分解爲便於Lucene處理的token,比如人體的腸道,負責把食物分解成易於吸取的小塊。
 
Query query = new QueryParser(Version.LUCENE_36,"text",analyzer).parse(nameen.trim());
這個是lucene內部先對nameen進行分詞,好比按空格以內的,而後分詞以後的結果任意一個被包含於text字段裏面的內容,那麼該條記錄就被選中
相關文章
相關標籤/搜索