码迷,mamicode.com
首页 > Web开发 > 详细

学习Lucene.net(二)

时间:2015-08-27 20:36:38      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

几种分析器的差异展示:

  学习了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/562794

Token: 如果一个字段被token化,这表示它经过了一个可将内容转化为tokens串的分析程序。 Token是建立索引的基本单位,表示每个被编入索引的字符。 在token化的过程中,分析程序会在使用任何转换逻辑(例如去掉 "a” 或 "the" 这类停用词,执行词干搜寻,将无大小写区分的所有文字转换成小写等)的同时,抽取应被编入索引的文本内容。由于和字段相关的内容减少到只剩核心元素,因此,索引作为与某个字段相关的文字内容,它的规模也被缩小了。只有被token化的字段也将被编入索引的情况下才有意义。 对Akamai.com来说,“标题”被token化,所以Lucene不用搜寻如 "a" 或 "the" 这类单词。

TokenStream是用来走访Token的iterator(迭代器) 

Tokenizer继承自TokenStream,其输入为Reader

TokenFilter继承自TokenStream,其作用是用来完成对TokenStream的过滤操作,譬如 
去StopWords,将Token变为小写等

Analyzer就是一个TokenStream工厂 

Analyzer的作用就是把文本分解为便于Lucene处理的token,好比人体的肠道,负责把食物分解成易于吸收的小块。
 
Query query = new QueryParser(Version.LUCENE_36,"text",analyzer).parse(nameen.trim());
这个是lucene内部先对nameen进行分词,比如按空格之内的,然后分词之后的结果任意一个被包含于text字段里面的内容,那么该条记录就被选中

 

学习Lucene.net(二)

标签:

原文地址:http://www.cnblogs.com/itjustwork/p/4764115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!