Whoosh - доступ к элементам результатов 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: 

Как я могу получить доступ к атрибутам хита?


person altunyurt    schedule 20.10.2013    source источник


Ответы (1)


Просмотр документов whoosh http://whoosh.readthedocs.org/en/latest/quickstart.html#the-searcher-object Я понял проблему. Оставьте это здесь на случай, если кто-то застрянет с той же проблемой.

Любой файловый дескриптор, связанный с поиском, закрывается, когда заканчивается область "с". Поэтому кажется, что набор результатов должен быть скопирован в другую структуру данных, такую ​​как список словарей в блоке «с», для использования вне блока.

person altunyurt    schedule 20.10.2013
comment
Спасибо! У меня была аналогичная проблема, ваш ответ помог мне! - person SherCoder; 28.10.2013
comment
У меня была такая же проблема, и это подтвердило мои подозрения, спасибо! - person bard; 11.10.2014
comment
Я обнаружил, что цикл for, понимание списка или выход давали мне ошибку, пока я не получил доступ к свойству каждой карты в цикле. - person Jordan Morris; 10.02.2020