2011-06-17 64 views
0

我一直在試圖讓xapian工作django haystack,因爲我需要一些搜索功能,但是已經遇到了一點牆壁問題。基本上,我得到了每指示安裝了一切,所以:django xapian-haystack許可問題

跑使安裝Xapian的核心和Xapian的綁定 跑PIP安裝草垛和PIP使用Django的安裝Xapian的,草垛,一切都正確安裝

作爲即時通訊CMS應用程序,我簡單地複製thier例如在給搜索功能測試,並就遇到了這個錯誤

InvalidIndexError at /search/ 
Unable to open index at /home/mike/sites/xapian_search 

我嘗試了好幾種不同的路徑爲HAYSTACK_XAPIAN_PATH設置,也遇到了另一個錯誤

OSError at/
(13, 'Permission denied') 

文件夾xapain_search已經給予了充分的燙髮(CHMOD 777)和那裏有全燙髮的xapian_index.php文件了。林不知道什麼即時消失在這裏,但即時絕望嘗試,並得到這個工作!

我草垛設置看起來像

HAYSTACK_SITECONF = 'lactoseintolerant.lactose_search' 
HAYSTACK_SEARCH_ENGINE = 'xapian' 
HAYSTACK_XAPIAN_PATH = '/home/mike/sites/xapian_search' 
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 50 

任何意見將不勝感激!

編輯

嘿再次 我認爲這個錯誤是與事實有沒有索引(是嗎?)我已經運行update_index rebuild_index clear_index所有這一切不似乎做什麼的命令,有沒有輸出錯誤,但仍然是指數法似乎從來沒有當命令運行

要建,我有叫lactose_search一個應用程序來喜歡這個app文件夾我有一個名爲search_indexs.py文件,以便projectname.lactose_search這我HAYSTACK_SITECONF點。現在我只是ç+ P從Django的CMS網站的例子,因爲它是cms_app內容我要搜索 這個文件看起來像

from django.conf import settings 
from django.utils.translation import string_concat, ugettext_lazy 

from haystack import indexes, site 

from cms.models.managers import PageManager 
from cms.models.pagemodel import Page 

def page_index_factory(lang, lang_name): 
if isinstance(lang_name, basestring): 
    lang_name = ugettext_lazy(lang_name) 

def get_absolute_url(self): 
    return '/%s%s' % (lang, Page.get_absolute_url(self)) 

class Meta: 
    proxy = True 
    app_label = 'cms' 
    verbose_name = string_concat(Page._meta.verbose_name, ' (', lang_name, ')') 
    verbose_name_plural = string_concat(Page._meta.verbose_name_plural, ' (', lang_name, ')') 

attrs = {'__module__': Page.__module__, 
     'Meta': Meta, 
     'objects': PageManager(), 
     'get_absolute_url': get_absolute_url} 

_PageProxy = type("Page%s" % lang.title() , (Page,), attrs) 

_PageProxy._meta.parent_attr = 'parent' 
_PageProxy._meta.left_attr = 'lft' 
_PageProxy._meta.right_attr = 'rght' 
_PageProxy._meta.tree_id_attr = 'tree_id' 

class _PageIndex(indexes.SearchIndex): 
    language = lang 

    text = indexes.CharField(document=True, use_template=False) 
    pub_date = indexes.DateTimeField(model_attr='publication_date') 
    login_required = indexes.BooleanField(model_attr='login_required') 
    url = indexes.CharField(stored=True, indexed=False, model_attr='get_absolute_url') 
    title = indexes.CharField(stored=True, indexed=False, model_attr='get_title') 

    def prepare(self, obj): 
     self.prepared_data = super(_PageIndex, self).prepare(obj) 
     plugins = obj.cmsplugin_set.filter(language=lang) 
     text = '' 
     for plugin in plugins: 
      instance, _ = plugin.get_plugin_instance() 
      if hasattr(instance, 'search_fields'): 
       text += ''.join(getattr(instance, field) for field in instance.search_fields) 
     self.prepared_data['text'] = text 
     return self.prepared_data 

    def get_queryset(self): 
     return _PageProxy.objects.published().filter(title_set__language=lang, publisher_is_draft=False).distinct() 

return _PageProxy, _PageIndex 

for lang_tuple in settings.LANGUAGES: 
    lang, lang_name = lang_tuple 
    site.register(*page_index_factory(lang, lang_name)) 

,並可以在這裏找到http://docs.django-cms.org/en/2.1.3/extending_cms/searchdocs.html

希望這額外的信息可能會讓回答這個問題變得更容易!

+0

Bump !!任何人對此有任何想法? – 2011-06-18 13:09:39

回答

0

我想出了我的問題在這裏,當我安裝到我的環境包我跑sudo pip安裝而不是簡單地使用pip。我無法解釋爲什麼這影響了乾草堆安裝,但一旦我刪除了所有的包和重新安裝的話我設法讓乾草堆運行

1

這是我還沒有遇到一個比較奇怪的問題(沒有人尚未報告如下:https://github.com/notanumber/xapian-haystack/issues

舊版本Xapian的-草堆所需的寫入權限(能夠創建索引)和在啓動時進行了檢查,證實了這種情況,但是這被刪除了。

只要進程能夠讀取HAYSTACK_XAPIAN_PATH文件夾,就不會收到任何Permission Denied錯誤。

你能確認你使用的是哪個版本的後端?如果可能的話,我還建議嘗試用Whoosh替換後端,只是作爲一種理智的檢查,確保沒有什麼可笑的事情發生。

+0

謝謝你的回答,哥哥今天早上和我一起去,讓你知道它是怎麼回事。它真的很奇怪我的意思是我甚至採取了給文件夾完整的燙髮和仍然有問題創建索引:S – 2011-06-20 08:30:13

1

它更可能是你還沒有使用下面的命令建立索引

python manage.py update_index 

同樣的事情發生在我身上,只需要運行上面的命令。