生成索引
相关概念
- 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用作备份。再将RebuildPath
copy到TrunkPath
内
读取TrunkPath内的数据,可增加机制读取若干次TrunkPath失败后改为读取BackPath备份文件
q:此处在RebuildPath
copy到TrunkPath
操作过程中,也可能出现读取的情况,如何处理?