2

現在、 django-haystackv2.0.0-betaWhooshをバックエンドとして使用してDjangoアプリケーションに検索機能を追加しています。これまでのところ、インデックスを作成して検索結果を返すことは問題なく機能します。ハイライト機能を有効にしたいのですが、機能しません。

私は高度にカスタマイズされたセットアップを使用していますが、干し草の山のドキュメントはあまり役に立ちません。私のDjangoアプリケーションは純粋なAJAXアプリケーションです。つまり、クライアントとサーバー間のすべてのリクエストは、jQueryとを使用して非同期に処理されます$.ajax()。そのため、haystack検索クエリセットを手動で作成し、検索結果をJSONオブジェクトにダンプするカスタムDjangoビューを作成しました。これはすべて正常に機能しますが、強調表示の追加は機能しません。これが私がこれまでに持っている私のコードです:

search_indexes.py

class CrawledWebpageIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        return CrawledWebpage # This is my Django model

forms.py

class HaystackSearchForm(forms.Form):

    q = forms.CharField(
        max_length=100,
        label='Enter your search query')

views.py (私には合理的に見えたので、この投稿からいくつかのコードを採用しましたが、おそらく間違っています)

def return_search_results_ajax(request):
    haystack_search_form = HaystackSearchForm(request.POST)
    response = {}

    if haystack_search_form.is_valid():
        search_query = haystack_search_form.cleaned_data['q']
        sqs = SearchQuerySet().filter(content=search_query)
        highlighted_search_form = HighlightedSearchForm(request.POST, searchqueryset=sqs, load_all=True)
        search_results = highlighted_search_form.search()

        # Here I extract those fields of my model that should be displayed as results
        webpage_urls = [result.object.url for result in search_results[:10]]
        response['webpage_urls'] = webpage_urls

    return HttpResponse(json.dumps(response), mimetype='application/json')

このコードは、検索結果が正しく返される限り正常に機能します。しかし、たとえば最初の検索結果など、強調表示されたテキストスニペットにアクセスしようとすると、次のようになります。

print search_results[0].highlighted

次に、結果として常に空の文字列を取得します。{'text': ['']}

誰かがハイライト機能を機能させるのを手伝ってもらえますか?事前にどうもありがとうございました。

4

2 に答える 2

3

これは、長い間解決されていないHaystackのバグである可能性があります:http://github.com/toastdriven/django-haystack/issues/310 http://github.com/toastdriven/django-haystack/issues / 273 http://github.com/toastdriven/django-haystack/issues/582

別の方法として、Whooshの代わりにHaystackの強調表示機能を使用して、結果を自分で強調表示することもできます。たとえば、で検索結果を取得したらsqs、次のことができます。

from haystack.utils import Highlighter
highlighter = Highlighter(search_query)
print highlighter.highlight(sqs[0].text)

最初の結果の強調表示されたテキストを取得します。ドキュメントについては、http://django-haystack.readthedocs.org/en/latest/highlighting.htmlを参照してください。

于 2012-12-20T16:27:50.747 に答える
0

私はHaystackに精通していませんがHaystackSearchForm、ある場所とHighlightedSearchForm別の場所で使用していることが原因である可能性がありますか?

于 2012-12-20T15:40:45.690 に答える