3

Django アプリケーションで django-haystack + whoosh を使用しようとしています。私のインデックスクラスは次のようになります

class ArticleIndex(indexes.SearchIndex, indexes.Indexable):

text = indexes.CharField(document=True, use_template=True)

title = indexes.CharField(model_attr='title')

abstract = indexes.CharField(model_attr='abstract')

def get_model(self):
    return Article

def index_queryset(self, using=None):
    return self.get_model().objects.all()

私のモデルは次のようになります。

class Article(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(User)
abstract = models.CharField(max_length=500, blank=True)
full_text = models.TextField(blank=True)
proquest_link = models.CharField(max_length=200, blank=True, null=True)
ebsco_link = models.CharField(max_length=200, blank=True, null=True)

def __unicode__(self):
    return self.title

私のテンプレートでは、ajax 検索フィールドを使用して Article モデルをクエリし、同じページに結果を返しています。基本的に、ajax は検索テキストを含む HttpPost リクエストをビューに送信します。ビューでは、抽象フィールドに HttpPost 経由で送信された検索テキストが含まれているすべての Article オブジェクトを取得したいと考えています。私の見解では、検索テキストを取得してから、次のようなモデルを取得しようとしています

search_text = request.POST['search_text']
articles = SearchQuerySet().filter(abstract=search_text)

しかし、結果は返されません。私が電話したら

articles = SearchQuerySet().all()

ローカル テスト DB にある 12 個のモデル オブジェクトを返します。ただし、フィルター関数は結果を返しません。私がやろうとしていることは、

articles= Article.objects.filter(abstract__contains=search_text)

助言がありますか?ありがとうございました

4

1 に答える 1

3

掘り下げた後、インデックスクラスを次のように更新しました。

class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.NgramField(document=True, use_template=True)
    title = indexes.NgramField(model_attr='title')

    abstract = indexes.NgramField(model_attr='abstract')

    def get_model(self):
        return Article

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

django-haystack 2.1.0 では、index.CharField 型の属性で .filter() を使用すると問題が発生します。誰かが詳細を提供できるかもしれませんが、これは私にとってうまくいきます。

于 2013-12-11T17:26:10.993 に答える