2021SC@SDUSC
之前我们讲解了创建索引对象,接下来就是创建文档对象了。
直接上代码:
document doc = new document(); doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("modified",DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("contents", new FileReader(f)));
document 对象主要包括以下部分:
1、此文档的 boost,默认为 1,大于一说明比一般的文档更加重要,小于一说明更不重要。
2、一个 ArrayList 保存此文档所有的域
3、每一个域包括域名,域值,和一些标志位,和 fnm,fdx,fdt 中的描述相对应。
那么此时的结果为:
doc document (id=42) boost 1.0 fields ArrayList(id=44) elementData Object[10] (id=46) [0] Field (id=48) binaryLength 0 binaryOffset 0 boost 1.0 fieldsData "exampledocs\file01.txt" isBinary false isIndexed true isStored true isTokenized false lazy false name "path" omitNorms false omitTermFreqAndPositions false storeOffsetWithTermVector false storePositionWithTermVector false storeTermVector false tokenStream null [1] Field (id=50) binaryLength 0 binaryOffset 0 boost 1.0 fieldsData "200910240957" isBinary false isIndexed true isStored true isTokenized false lazy false name "modified" omitNorms false omitTermFreqAndPositions false storeOffsetWithTermVector false storePositionWithTermVector false storeTermVector false tokenStream null [2] Field (id=52) binaryLength 0 binaryOffset 0 boost 1.0 fieldsData FileReader (id=58) isBinary false isIndexed true isStored false isTokenized true lazy false name "contents" omitNorms false omitTermFreqAndPositions false storeOffsetWithTermVector false storePositionWithTermVector false storeTermVector false tokenStream null modCount 3 size 3
接下来是将文档加入 IndexWriter
代码如下:
writer.adddocument(doc); -->IndexWriter.adddocument(document doc, Analyzer analyzer) -->doFlush = docWriter.adddocument(doc, analyzer); --> documentsWriter.updatedocument(document, Analyzer, Term)
IndexWriter 继而调用 documentsWriter.adddocument,其又调用
documentsWriter.updatedocument
之后将文档加入 documentsWriter
documentsWriter.updatedocument(document doc, Analyzer analyzer, Term delTerm) -->(1) documentsWriterThreadState state = getThreadState(doc, delTerm); 104 -->(2) DocWriter perDoc = state.consumer.processdocument(); -->(3) finishdocument(state, perDoc);
documentsWriter 对象主要包含以下几部分:
1、用于写索引文件
IndexWriter writer;
Directory directory;
Similarity similarity:分词器
String segment:当前的段名,每当 flush 的时候,将索引写入以此为名称的段。
IndexWriter.doFlushInternal() --> String segment = docWriter.getSegment();//return segment --> newSegment = new SegmentInfo(segment,……); --> docWriter.createCompoundFile(segment);//根据 segment 创建 cfs 文件。
String docStoreSegment:存储域所要写入的目标段。(在索引文件格式一文中已经详细描述)
int docStoreOffset:存储域在目标段中的偏移量。
int nextDocID:下一篇添加到此索引的文档 ID 号,对于同一个索引文件夹,此变量唯一,且同步访问。
DocConsumer consumer; 这是整个索引过程的核心,是 IndexChain 整个索引链的源头。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)