Поиск в стоге сена не работает с автозаполнением

Я пытаюсь использовать django-haystack для поиска в нашем продукте. Когда пользователь вводит любое ключевое слово для поиска (например, «компьютер»), он должен искать это ключевое слово в нескольких полях. Например. когда пользователь вводит «Компьютер», он должен найти объекты, в которых «Компьютер» присутствует в любом из полей этого объекта. Но есть проблема. Если пользователь вводит в поле поиска только «Комп», он вообще не находит объекты.

Поэтому я попытался использовать автозаполнение. С автозаполнением я смог добиться этого только для одного поля. Для других полей снова возвращается неудачный результат.

У меня есть стог сена со свистом в качестве бэкэнда.

Подробности среды:
Django v1.5.3
Haystack v2.1.0
Whoosh v2.5.3

Следующее определено в моем файле search_index.py.

class Message_Index(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    message = indexes.CharField(model_attr='messagetext', null=True)
    forum = indexes.CharField(model_attr='forum', null=True)
    status = indexes.CharField(model_attr='status', null=True)
    tags = indexes.CharField(model_attr='tags', null=True)
    author_name = indexes.EdgeNgramField(null=True)
    author_number = indexes.EdgeNgramField(null=True)
    message_date = indexes.DateTimeField(null=True)

    def get_model(self):
        return Message

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

    def prepare_author_name(self, obj):
        return obj.message.user.name

    def prepare_author_number(self, obj):
        return obj.message.user.number

    def prepare_message_date(self, obj):
        return obj.message.date

    def prepare_tags(self, obj):
        return [tag.tag for tag in obj.tags.all()]

    def prepare_message_thread(self, obj):
        return obj.message.thread

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

когда я пытаюсь выполнить поиск с помощью search_keyword = 'user1', он возвращает правильный результат, но когда я ввожу search_keyword = '223', он не возвращает никакого результата.

results_by_name = results.autocomplete(author_name=search_keyword)
results_by_number = results.autocomplete(author_number=search_keyword)

if results_by_name.count() > 0:
    combined_resultsets(results,results_by_name,'message_date')
elif results_by_number.count() > 0:
    combined_resultsets(results,results_by_number,'message_date')

Combined_resultsets — это функция, определяемая следующим образом:

def combined_resultsets(resultset1, resultset2, sortby):
    if sortby is not None:
        resultset1 = sorted(chain(resultset1, resultset2),key=attrgetter(sortby))
    else:
        resultset1 = chain(resultset1, resultset2)

Может ли кто-нибудь помочь мне с этим?


person nik    schedule 18.09.2013    source источник


Ответы (1)


пожалуйста, настройте свой проект URL на метод автозаполнения в корневом каталоге приложения view.py. вы можете следить за документацией на странице Autocomplete и, пожалуйста, проверьте индексы вашего шаблона.

person drayanaindra    schedule 19.12.2013