def __init__(self, storage, schema, segment, generation=None, codec=None): self.storage = storage self.schema = schema self.segment = segment self._gen = generation self.is_closed = False # Copy info from underlying segment self._has_deletions = segment.has_deletions() self._dc = segment.doc_count() self._dc_all = segment.doc_count_all() if hasattr(self.segment, "segment_id"): self.segid = str(self.segment.segment_id()) else: self.segid = Segment._random_id() # Get microreaders from codec if codec is None: from whoosh.codec.standard import StdCodec codec = StdCodec(self.storage) self._codec = codec self._terms = codec.terms_reader(self.segment) self._lengths = codec.lengths_reader(self.segment) self._stored = codec.stored_fields_reader(self.segment) self._vectors = None # Lazy open with self._open_vectors() self._dawg = None # Lazy open with self._open_dawg() self.set_caching_policy()
def __init__(self, ix, poolclass=None, timeout=0.0, delay=0.1, _lk=True, limitmb=128, docbase=0, codec=None, **kwargs): # Lock the index self.writelock = None if _lk: self.writelock = ix.lock("WRITELOCK") if not try_for(self.writelock.acquire, timeout=timeout, delay=delay): raise LockError # Get info from the index self.storage = ix.storage self.indexname = ix.indexname info = ix._read_toc() self.generation = info.generation + 1 self.schema = info.schema self.segments = info.segments self.docnum = self.docbase = docbase self._setup_doc_offsets() # Internals poolprefix = "whoosh_%s_" % self.indexname self.pool = PostingPool(limitmb=limitmb, prefix=poolprefix) self.newsegment = Segment(self.indexname, 0) self.is_closed = False self._added = False # Set up writers if codec is None: from whoosh.codec.standard import StdCodec codec = StdCodec(self.storage) self.codec = codec self.perdocwriter = codec.per_document_writer(self.newsegment) self.fieldwriter = codec.field_writer(self.newsegment)