2013-10-20 33 views
1

以下是一個簡單的分頁函數。飛快移動 - 訪問search_page結果項拋出ReaderClosed異常

from whoosh import index 
def _search(q): 
    wix = index.open_dir(settings.WHOOSH_INDEX_DIR) 
    term = Term("title", q) | Term("content", q) 
    page_id = 1 

    with wix.searcher() as s: 
     return s.search_page(term, page_id, pagelen=settings.ITEMS_PER_PAGE) 

In [15]: p = _search("like") 

In [16]: p.results[0].reader.is_closed 
Out[16]: True 

如果我嘗試訪問命中的屬性,我得到ReaderClosed異常。

In [19]: p.results 
Out[19]: <Top 10 Results for Or([Term('title', 'like'), Term('content', 'like')]) runtime=0.0214910507202> 

[21]: p.results[0]["title"] 
--------------------------------------------------------------------------- 
ReaderClosed        Traceback (most recent call last) 
/usr/local/lib/python2.7/dist-packages/Django-1.5.3-py2.7.egg/django/core/management/commands/shell.p yc in <module>() 
----> 1 p.results[0]["title"] 

/usr/local/lib/python2.7/dist-packages/whoosh/searching.pyc in __getitem__(self, fieldname) 
1500 
1501  def __getitem__(self, fieldname): 
-> 1502   if fieldname in self.fields(): 
1503    return self._fields[fieldname] 
1504 

/usr/local/lib/python2.7/dist-packages/whoosh/searching.pyc in fields(self) 
1388 
1389   if self._fields is None: 
-> 1390    self._fields = self.searcher.stored_fields(self.docnum) 
1391   return self._fields 
1392 

/usr/local/lib/python2.7/dist-packages/whoosh/reading.pyc in stored_fields(self, docnum) 
1197  def stored_fields(self, docnum): 
1198   segmentnum, segmentdoc = self._segment_and_docnum(docnum) 
-> 1199   return self.readers[segmentnum].stored_fields(segmentdoc) 
1200 
1201  # Per doc methods 

/usr/local/lib/python2.7/dist-packages/whoosh/reading.pyc in stored_fields(self, docnum) 
    693  def stored_fields(self, docnum): 
    694   if self.is_closed: 
--> 695    raise ReaderClosed 
    696   assert docnum >= 0 
    697   schema = self.schema 

ReaderClosed: 

如何訪問命中的屬性?

回答

8

通過whoosh的文檔瀏覽http://whoosh.readthedocs.org/en/latest/quickstart.html#the-searcher-object我已經理解了這個問題。如果有人遇到同樣的問題,請留在這裏。

任何與搜索相關的文件描述符在「with」範圍結束時關閉。因此,應該將結果集複製到另一個數據結構中,例如「with」塊中的字典列表,以便在塊之外使用。

+0

謝謝!我有類似的問題,你的答案幫助我! – SherCoder

+0

我有同樣的問題,這證實了我的懷疑,謝謝! – bard