аватар question@mail.ru · 01.01.1970 03:00

Поиск по вхождению строки в django + haystack + Whoosh

Имеется некая модель. В ней хранятся названия фильмов. Вот класс индекса:

from haystack import indexesfrom kino.films.models import Filmsclass FilmsIndex(indexes.SearchIndex, indexes.Indexable):    text = indexes.CharField(document=True, use_template=True)    rusname = indexes.CharField(model_attr='rusname')    origname = indexes.CharField(model_attr='origname')    year = indexes.IntegerField(model_attr='year')    def get_model(self):        retu Films

Индекс создаётся и всё почти работает, но не совсем так как надо. Запрос вида

SearchQuerySet().filter(content='avatar')

возвращает то, что нужно, а вида

SearchQuerySet().filter(content='avat')

не возвращает ничего. Что я делаю не так?

аватар answer@mail.ru · 01.01.1970 03:00

Ничего. А точнее вы все делаете правильно. Сам на этом накололся, когда делал через хайстэк автокомплит в поиске. Whoosh просто ""полнотекстовый"" поиск с минимальной морфологией. Для поиска вхождений вам надо пользоваться классическим like'ом.

UPDATE Каюсь, я вас обманул. Решил все-таки нагуглить, чтобы не ударить в грязь лицом. И вот что нашлось. У хайстэка есть специальный метод autocomplete как раз для этого.

import datetimefrom haystack import indexesfrom myapp.models import Noteclass NoteIndex(indexes.SearchIndex, indexes.Indexable):    text = indexes.CharField(document=True, use_template=True)    author = indexes.CharField(model_attr='user')    pub_date = indexes.DateTimeField(model_attr='pub_date')    # We add this for autocomplete.    content_auto = indexes.EdgeNgramField(model_attr='content')    def get_model(self):        retu Note    def index_queryset(self):        """"""Used when the entire index for model is updated.""""""        retu Note.objects.filter(pub_date__lte=datetime.datetime.now())

И собственно сам поиск

from haystack.query import SearchQuerySetSearchQuerySet().autocomplete(content_auto='old')# Result match things like 'goldfish', 'cuckold' & 'older'.

Последние

Похожие