0

私はいくつかの検索機能を必要とするプロジェクトimのためにxapianが動作するdjangohaystackを取得しようとしていましたが、少し壁にぶつかりました!! 基本的に、私は指示に従ってすべてをインストールしました、それで:

xapian-coreとxapianバインディングのmakeinstallを実行し、pipinstallhaystackとpipinstallxapian-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

アドバイスをいただければ幸いです!!

編集

もう一度、このエラーはインデックスがないという事実に関連していると思います(そうですか?)コマンドupdate_indexrebuild_index clear_indexを実行しましたが、すべて何も実行されていないようです。エラーは出力されませんが、インデックスは表示されません。コマンドの実行時にビルドされます

私はHAYSTACK_SITECONFが好きなlactose_searchというアプリを持っているので、このアプリフォルダーにprojectname.lactose_searchというファイルがあります。search_indexs.pyというファイルがあります。今のところ、このファイルを検索したいcms_appコンテンツであるため、djangocmsサイトの例をc+pするだけです。

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

この追加情報により、この質問への回答が少し簡単になることを願っています。

4

3 に答える 3

2

次のコマンドを使用してインデックスを作成していない可能性が高くなります

python manage.py update_index

同じことが私にも起こりますが、上記のコマンドを実行する必要があります。

于 2012-09-18T11:32:25.563 に答える
1

これは私がまだ遭遇していないかなり奇妙な問題です(そして誰もここでまだ報告していません:https ://github.com/notanumber/xapian-haystack/issues )

Xapian-Haystackの古いバージョンでは、(インデックスを作成できるようにするために)書き込み権限が必要であり、起動時にこれが当てはまるかどうかを確認するチェックがありましたが、これは削除されました。

プロセスがフォルダを読み取ることができる限り、エラーは発生HAYSTACK_XAPIAN_PATHしません。Permission Denied

使用しているバックエンドのバージョンを確認できますか?可能であれば、何かおかしなことが起こっていないことを健全性チェックするのと同じように、バックエンドをWhooshと交換することもお勧めします。

于 2011-06-18T16:02:20.043 に答える
0

パッケージを自分の環境にインストールしたときに、単にpipを使用する代わりに、sudo pip installを実行したときに、自分の問題がここにあることがわかりました。これがhaystackのインストールに影響した理由を説明することはできませんが、すべてのパッケージを削除して再インストールすると、haystackを実行することができました。

于 2011-06-20T16:11:56.983 に答える