我一直在試圖讓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
希望這額外的信息可能會讓回答這個問題變得更容易!
Bump !!任何人對此有任何想法? – 2011-06-18 13:09:39