簡體   English   中英

更新索引時,Python Whoosh AttributeError

[英]Python Whoosh AttributeError when updating index

當我對數據庫進行更改時,我正在嘗試更新我的Whoosh搜索索引,但是不斷出現我無法弄清的錯誤。

我的觀點之一:

from search import update_index

@view_config(route_name='update_effect_brief', permission='edit')
def update_effect_brief(request):
    name = request.matchdict['pagename']
    brief = request.params['effect_brief']
    effect = Effect.get_by_name(name) # This is an "effect" object
    effect.update_brief(brief)
    update_index(effect)
return HTTPFound(location=request.route_url('view_effect', pagename=name))

我的search.py​​文件:

from whoosh.index import create_in, open_dir

def update_index(obj):
    '''Update single ingredient, product or effect.'''
    index = open_dir('searchindex') # searchindex is the name of the directory

    with index.searcher as searcher: # crashes on this line!
        writer = index.writer()
        update_doc(writer, obj)

追溯:

Traceback (most recent call last):
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid_debugtoolbar-1.0.9-py2.7.egg/pyramid_debugtoolbar/toolbar.py", line 152, in toolbar_tween
    response = _handler(request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid_debugtoolbar-1.0.9-py2.7.egg/pyramid_debugtoolbar/panels/performance.py", line 55, in resource_timer_handler
    result = handler(request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5-py2.7.egg/pyramid/tweens.py", line 21, in excview_tween
    response = handler(request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid_tm-0.7-py2.7.egg/pyramid_tm/__init__.py", line 82, in tm_tween
    reraise(*exc_info)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid_tm-0.7-py2.7.egg/pyramid_tm/__init__.py", line 63, in tm_tween
    response = handler(request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5-py2.7.egg/pyramid/router.py", line 161, in handle_request
    response = view_callable(context, request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5-py2.7.egg/pyramid/config/views.py", line 237, in _secured_view
    return view(context, request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5-py2.7.egg/pyramid/config/views.py", line 377, in viewresult_to_response
    result = view(context, request)
  File "/home/home/SkinResearch/env/local/lib/python2.7/site-packages/pyramid-1.4.5-py2.7.egg/pyramid/config/views.py", line 493, in _requestonly_view
    response = view(request)
  File "/home/home/SkinResearch/skinresearch/skinproject/views.py", line 544, in update_effect_brief
    update_index(effect)
  File "/home/home/SkinResearch/skinresearch/skinproject/search.py", line 37, in start_update
    update_index(obj)
  File "/home/home/SkinResearch/skinresearch/skinproject/search.py", line 92, in update_index
    with index.searcher as searcher:
AttributeError: __exit__

我究竟做錯了什么?

您需要調用 index.searcher()方法來創建上下文管理器:

with index.searcher() as searcher:

請參見Whoosh快速入門中的“ Searcher對象”部分Searcher對象文檔。

對於我來說,尚不十分清楚為什么要創建搜索器,但是隨后在代碼塊中創建了writer並更新了索引。 也許您想在這里使用writer作為上下文管理器:

with index.writer() as writer:
    update_doc(writer, obj)

並讓搜索者進行搜索操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM