3

Django 1.4でhaystack 1.2.7 + whoosh 2.4.0を使用しています(Pythonは2.7です)

例: 検索クエリ「sear」は、「search」と「sear」と「searching」などを含むアイテムと一致する必要があります。

私の設定:

HAYSTACK_SITECONF = 'verticalsoftware.search.search_sites'
HAYSTACK_SEARCH_ENGINE = 'whoosh'
HAYSTACK_WHOOSH_PATH = 'C:/whoosh/prodeo_index'
HAYSTACK_INCLUDE_SPELLING = True

検索インデックス:

class GalleryIndex(SearchIndex):
    text = indexes.CharField(document=True, use_template=True)
    content_auto = indexes.NgramField(model_attr='title') 
    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return Gallery.objects.filter(date_added__lte=datetime.datetime.now())

EdgeNgramField および/または RealTimeSearchIndex でも試しました

カスタム urlCONF:

from django.conf.urls.defaults import *
from verticalsoftware.search.views import SearchWithRequest

urlpatterns = patterns('haystack.views',
    url(r'^$', SearchWithRequest(), name='haystack_search'), 
)

カスタム ビュー:

from haystack.views import SearchView
import operator
from haystack.query import SearchQuerySet, SQ

class SearchWithRequest(SearchView):

    __name__ = 'SearchWithRequest'

    def build_form(self, form_kwargs=None):
        if form_kwargs is None:
            form_kwargs = {}

        if self.searchqueryset is None:
            sqs = SearchQuerySet().filter(reduce(operator.__or__, [SQ(text=word.strip()) for word in self.request.GET.get("q").split(' ')]))
            form_kwargs['searchqueryset'] = sqs

        return super(SearchWithRequest, self).build_form(form_kwargs)

sqsについては、ドキュメントと関連するすべてのフォーラム投稿に見られるように、フィルターとオートコンプリートを使用して、考えられるすべてを試しました。content_auto または text フィールドと組み合わせて __startswith および __contains を使用してもまったく役に立ちませんでした (後者は何にも一致しません; 前者は 1 文字または完全な文字列のみに一致しました)。

上記で貼り付けたバリアントには、少なくともスペースを含む文字列の結果を返すという利点があります (各単語は、対応するデータベース エントリと完全に一致する必要があるため、この投稿が必要です)

どんな助けも非常に高く評価されます

4

1 に答える 1