Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (9)

Лучшие ответы пользователя

Все ответы (1)
  • Как довести до ума полнотекстовый поиск в Djnago + PostgreSQL?

    @Tryggvi Автор вопроса
    Раз никто не отвечает, то я отвечу сам.
    В PostgreSQL активируем расширение "pg_trgm":
    CREATE EXTENSION pg_trgm;
    Потом во Views импортируем:
    from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector, TrigramSimilarity


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

    vector = SearchVector('categorysub__name', 'brand__name', 'category__name', 'name', raw=True, fields=('name'))
    vector_trgm = TrigramSimilarity('categorysub__name', q, raw=True, fields=('name')) + TrigramSimilarity('brand__name', q, raw=True, fields=('name')) + TrigramSimilarity('category__name', q, raw=True, fields=('name')) + TrigramSimilarity('name', q, raw=True, fields=('name'))
    return queryset.annotate(search=vector).order_by('price').filter(search=q) or queryset.annotate(similarity=vector_trgm).filter(similarity__gt=0.2).order_by('price')


    Таким образом мы получаем полнотекстовый поиск, который так же будет корректно работать, если пользователь опечатался.

    Если использовать TrigramSimilarity без SearchVector, то результат поиска будет не всегда правдивым.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (9)