专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » lucene更新索引:Lucene.Net 2.3.1开发介绍 3、索引( 3) »正文

lucene更新索引:Lucene.Net 2.3.1开发介绍 3、索引( 3)

来源: 发布时间:星期四, 2009年1月15日 浏览:9次 评论:0
  3、Field配置所产生效果

  索引数据简单代码只要两个思路方法就搞定了而在索引过程中用到些类里最简单作用也不小就是Field接下来看看Field各项设置都会有什么样效果

  代码 3.1

  Code

1/**//// <summary>
2/// 索引数据
3/// </summary>
4private void Index
5{
6  Analyzer analyzer = StandardAnalyzer;
7  IndexWriter writer = IndexWriter("IndexDirectory", analyzer, true);
8  AddDocument(writer, "我祖国", "英语单词");
9  AddDocument(writer, "祖国万岁", "英语语法");
10  AddDocument(writer, "祖国", "英语单元");
11  AddDocument(writer, "人民", "单词测试");
12  writer.Optimize;
13  writer.Close;
14}
15/**//// <summary>
16/// 为索引准备数据
17/// </summary>
18/// <param name="writer">索引例子</param>
19/// <param name="content">需要索引数据</param>
20void AddDocument(IndexWriter writer, title, content)
21{
22  Document document = Document;
23  document.Add( Field("title", title, Field.Store.Yes, Field.Index.TOKENIZED));
24  document.Add( Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
25  writer.AddDocument(document);
26}


  代码3.1就是准备好索引过程运行然后呢?这里要说到个工具luke(lukeall)这是个java平台下Lucene索引管理工具抽空我实现了个简单dotNet版本详细请查看 NLuke版本更新信息 接下来索引会用这个软件Software对索引进行分析

  现在就可以开始调整AddDocument思路方法中Field例子化时参数了看看调整后会对索引造成什么样影响这里以title对应Field为例

  3.1 Field.Stroe选项

  这个选项有3个值下面来分析下效果

  3.1.1 Field.Stroe.Yes

  刚好默认就是这个用这选项建完索引然后用NLuke查看发现title这个字段有而且有8个Term切换到文档区域发现文档title有内容这个选项表示就是存储所以这些是正常状态

  3.1.2 Field.Stroe.No

  title也有8个Term但是文档中没有字段了也就是说现在可以用这个字段来搜索但是搜索结果Hits中不能用Document例子Get思路方法来取得字段内容了那就是字段内容没有被存储

  3.1.3 Field.Store.COMPRESS

  设置为COMPRESS报错了信息“Compression support not configured”是个配置这个在SupportClassCheckCompressionSupport思路方法被抛出这里读取了个配置文件然后根据配置文件指定类名来创建例子这个类必须实现接口 SupportClass.CompressionSupport.ICompressionAdapter在Lucene.Net中内置了个“SharpZipLibAdapter”但是需要有编译符号SHARP_ZIP_LIB才能编译进去为了看看效果所以给项目添加SHARP_ZIP_LIB符号然后增加app.config配置文件在apping中添加Lucene.Net.CompressionLib.值是SharpZipLibAdapter然后下载 ICSharpCode.SharpZipLib.dll,这个dll才是真正实现压缩算法下载地址: http://sourceforge.net/project/downloading.php?groupname=sharpdevelop&filename=SharpZipLib_0855_Bin.zip&use_mirror=nchc

  把ICSharpCode.SharpZipLib.dll引入项目就可以使用COMPRESS这个选项了效果和Yes是

  3.1.4 效果对比

  对于Field.Stroe.Yes产生字节大小是:627字节

  Field.Stroe.COMPRESS是:661字节

  Field.Stroe.No是:579字节

  使用Field.Stroe.COMPRESS反而是占用空间最大这不符合原先设想那是我们索引文本太小你可以试试看增加索引内容再对比小效果

  3.2 Field.Index选项

  现在把Field.Stroe设置为Field.Stroe.Yes接着来看看Field.Index效果

  3.2.1 Field.Index.TOKENIZED

  这个选项是用来控制分词TOKENIZED表明需要分词运行后title有8个Term没有问题

  3.2.2 Field.Index.UN_TOKENIZED

  运行后只有4个Term而且Term是原先写入内容和存储完整内容没有区别

  3.2.3 Field.Index.NO

  和预想titleTerm个也没有了

  3.2.4 Field.Index.NO_NORMS

  效果似乎和Field.Index.UN_TOKENIZED但是它把词条附加信息全去掉了比如它将不再记录词正太分布数据东西这样可以减少占用空间而且这个使用方法也有个条件就是只要开启就要全部开启否则会失效比如索引了 4条数据没使用NO_NORMS而接下来两条使用了NO_NORMS那么前面 4条数据效果那么接下来两条数据实际上并没有产生NO_NORMS效果

  3.2.5 效果分析

  124 3种情况虽然区别但是都可以搜索而第 3种情况也就是设置为NO则不可以搜索种情况可以分词搜索并且可以排序而24则不能分词搜索第 4种情况不可以排序(不可以排序指不能按照词出现频率进行排序)

  从上面也可以看出假设Field.Store设置为NO,而Field.Index也设置为NO那就和没添加是Field.Store是给你取完整数据用而Field.Index则是给搜索用在极端情况下可以设置Field.Store为NO而Field.Index可以搜索等取数据时候再从数据源(比如数据库)它们中间有个关联法则那样可以有效减轻Lucene工作压力

  3.3 Field.TermVector

  Field.TermVector选项现在工具还没实现这个功能不过可以自己编码来实现

  代码 3.3.5.1

  Code

1[Test]
2public void TermVectorTest
3{
4  IndexReader reader = IndexReader.Open("IndexDirectory");
5   numDoc = reader.NumDocs;
6  for ( i = 0; i < numDoc; i)
7  {
8    Console.WriteLine("Doc:#" + i + "----------------------------");
9    Document doc = reader.Document(i);
10    Field field = doc.GetField("title");
11    Console.WriteLine("是否被索引:" + field.IsIndexed);
12    Console.WriteLine("是否被存储:" + field.IsStored);
13    Console.WriteLine("是否存储开始位置:" + field.IsStorePositionWithTermVector);
14    Console.WriteLine("是否存储结束位置:" + field.IsStoreOffWithTermVector);
15    Console.WriteLine("是否保存了向量:" + field.IsTermVectorStored);
16    Console.WriteLine("是否分词:" + field.IsTokenized);
17    Console.WriteLine("--------------------------------------------");
18  }
19  reader.Close;
20}




  设置Field.TermVector后可以用代码3.3.5.1检查效果你可以自己去试试



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: