1 ///////////////////////////////////////////////////////////////////////////// 2 // Copyright (c) 2009-2014 Alan Wright. All rights reserved. 3 // Distributable under the terms of either the Apache License (Version 2.0) 4 // or the GNU Lesser General Public License. 5 ///////////////////////////////////////////////////////////////////////////// 6 7 #ifndef FIELDSWRITER_H 8 #define FIELDSWRITER_H 9 10 #include "LuceneObject.h" 11 12 namespace Lucene { 13 14 class FieldsWriter : public LuceneObject { 15 public: 16 FieldsWriter(const DirectoryPtr& d, const String& segment, const FieldInfosPtr& fn); 17 FieldsWriter(const IndexOutputPtr& fdx, const IndexOutputPtr& fdt, const FieldInfosPtr& fn); 18 virtual ~FieldsWriter(); 19 20 LUCENE_CLASS(FieldsWriter); 21 22 protected: 23 FieldInfosPtr fieldInfos; 24 IndexOutputPtr fieldsStream; 25 IndexOutputPtr indexStream; 26 bool doClose; 27 28 public: 29 static const uint8_t FIELD_IS_TOKENIZED; 30 static const uint8_t FIELD_IS_BINARY; 31 static const uint8_t FIELD_IS_COMPRESSED; 32 33 static const int32_t FORMAT; // Original format 34 static const int32_t FORMAT_VERSION_UTF8_LENGTH_IN_BYTES; // Changed strings to UTF8 35 static const int32_t FORMAT_LUCENE_3_0_NO_COMPRESSED_FIELDS; // Lucene 3.0: Removal of compressed fields 36 37 // NOTE: if you introduce a new format, make it 1 higher than the current one, and always change this 38 // if you switch to a new format! 39 static const int32_t FORMAT_CURRENT; 40 41 public: 42 void setFieldsStream(const IndexOutputPtr& stream); 43 44 /// Writes the contents of buffer into the fields stream and adds a new entry for this document into the index 45 /// stream. This assumes the buffer was already written in the correct fields format. 46 void flushDocument(int32_t numStoredFields, const RAMOutputStreamPtr& buffer); 47 48 void skipDocument(); 49 void flush(); 50 void close(); 51 void writeField(const FieldInfoPtr& fi, const FieldablePtr& field); 52 53 /// Bulk write a contiguous series of documents. The lengths array is the length (in bytes) of each raw document. 54 /// The stream IndexInput is the fieldsStream from which we should bulk-copy all bytes. 55 void addRawDocuments(const IndexInputPtr& stream, Collection<int32_t> lengths, int32_t numDocs); 56 57 void addDocument(const DocumentPtr& doc); 58 }; 59 60 } 61 62 #endif 63