学习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字段里面的内容,那么该条记录就被选中
相关文章
相关标签/搜索