проблема разрешения django xapian-haystack - PullRequest
0 голосов
/ 17 июня 2011

Я пытался заставить xapian работать на стоге сена django для проекта, над которым я работаю, который требует некоторых функций поиска, но натолкнулся на стену! В основном я установил все по инструкции, поэтому:

запустил make install для xapian-core и привязок xapian запустил pip install haystack и pip install xapian-haystack и все установилось правильно

Поскольку я использовал приложение django cms, я просто скопировал их пример, чтобы проверить функциональность поиска, и натолкнулся на эту ошибку

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

Любой совет будет с благодарностью !!

редактировать

Привет еще раз я думаю, что эта ошибка связана с тем фактом, что индексов нет (это правильно?). Я выполнил команды строится при запуске команд

У меня есть приложение с именем lactose_search, на которое указывает мой HAYSTACK_SITECONF, так что projectname.lactose_search в этой папке приложения, у меня есть файл с именем search_indexs.py. На данный момент у меня есть просто c + 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 / ru / 2.1.3 / extending_cms / searchdocs.html

Надеюсь, эта дополнительная информация поможет ответить на этот вопрос abit!

Ответы [ 3 ]

1 голос
/ 18 сентября 2012

более вероятно, что вы не построили индекс, используя следующую команду

python manage.py update_index

То же самое происходит со мной, просто необходимо выполнить выше команды.

1 голос
/ 18 июня 2011

Это довольно странная проблема, с которой я еще не сталкивался (и никто еще не сообщал здесь: https://github.com/notanumber/xapian-haystack/issues)

В более старых версиях Xapian-Haystack требовалось разрешение на запись (чтобы можно было создавать индексы) и при запуске была проверка, которая подтвердила, что это так, но это было удалено.

Пока процесс может читать папку HAYSTACK_XAPIAN_PATH, вы не должны получать никаких ошибок Permission Denied.

Можете ли вы подтвердить, какую версию бэкэнда вы используете? Если возможно, я бы также предложил попробовать поменять бэкэнд на Whoosh просто для проверки работоспособности, чтобы не происходило ничего странного.

0 голосов
/ 20 июня 2011

Я понял, в чем моя проблема, когда я установил пакеты в свою среду, я запустил sudo pip install вместо простого использования pip.Я не могу объяснить, почему это повлияло на установку стога сена, но как только я удалил все пакеты и переустановил их, мне удалось запустить стог сена

...