Пример #1
0
        public override void Dispose()
        {
            foreach (var node in _dirty)
            {
                var ixFileName  = Path.Combine(SessionFactory.Dir, string.Format("{0}.{1}.ix", CollectionId, node.Key));
                var tmpFileName = string.Format("{0}.tmp_ix", Path.GetFileNameWithoutExtension(ixFileName));

                using (var indexStream = new FileStream(
                           tmpFileName, FileMode.Append, FileAccess.Write, FileShare.None))
                {
                    node.Value.Serialize(indexStream, VectorStream, PostingsStream);
                }

                SessionFactory.RefreshIndex(CollectionId, node.Key, node.Value);

                File.Copy(tmpFileName, ixFileName, overwrite: true);
                File.Delete(tmpFileName);
            }

            ValueStream.Flush();
            KeyStream.Flush();
            DocStream.Flush();
            ValueIndexStream.Flush();
            KeyIndexStream.Flush();
            DocIndexStream.Flush();
            PostingsStream.Flush();
            VectorStream.Flush();

            base.Dispose();
        }