生成索引

相关概念

  • IndexWriter:索引生成器
  • Analyzer:分析器,用于字段数据分词
  • Document:相当于是索引内一条完整的数据
  • Field:Document内的一个字段
  • Field.Store:设置字段是否存储,设置存储才可以从索引内读取值
  • Field.Index:设置字段是否可以分析,排序,过滤,聚合等
  • Field.TermVector:字段项向量,用于相似度匹配

注意事项

生成索引所在文件夹

防止被锁

FSDirectory operatDir = FSDirectory.Open(new DirectoryInfo(ColipuIndexReader.RebuildPath), new NoLockFactory());
IndexWriter.Unlock(operatDir);

定义IndexWriter

public IndexWriter(Store.Directory d, Analyzer a, bool create, MaxFieldLength mfl);
IndexWriter.Optimize();
IndexWriter.Flush(true, true, true);
IndexWriter.Dispose();

d:生成所在文件夹
a:分析器,如WhitespaceAnalyzer按空格分词
create:是否创建,用于区分全量操作和增量操作
mfl:限制字段长度
Optimize:索引优化
Flush:相当于保存操作
Dispose:释放生成器

生成索引健壮性

在生成索引时,如果此时存在读取操作,会导致冲突读取不到数据
解决方案:
定义三份索引文件夹分别为RebuildPath TrunkPath BackPath
RebuildPath:用做生成索引
TrunkPath:用做读取索引
BackPath:索引备份
索引生成在RebuildPath文件夹,生成成功后将TrunkPath文件夹内的索引copy到BackPath用作备份。再将RebuildPathcopy到TrunkPath
读取TrunkPath内的数据,可增加机制读取若干次TrunkPath失败后改为读取BackPath备份文件

q:此处在RebuildPathcopy到TrunkPath操作过程中,也可能出现读取的情况,如何处理?