Использование иконок для поисковых запросов с пробелами в Django

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

Модель:

class Event(BaseModel):
    name = models.CharField(max_length=255, blank=True)
    description = models.TextField(blank=True)

Объект

Event.objects.create(
   name="Test query event",
   description="Test Description"
)

Сам запрос:

query = "test query"
Event.objects.all().annotate(search=SearchVector("name")).filter(search__icontains=query)

Я использую последние версии Django+DRF+django-filters, но можно добавить другие пакеты в проект.

Можете ли вы предоставить больше информации о том, что происходит и как выглядят ваши поисковые запросы?

После перечитывания я думаю, что вы, возможно, пытаетесь искать частичные слова, но ваш пример выдает полные слова. Если ваш пример точен, то вам не нужно ничего делать:

from django.contrib.postgres.search import SearchQuery, SearchVector

Event.objects.create(name="test query")
Event.objects.create(name="tESt qUEry")
Event.objects.create(name="test not a query")
Event.objects.create(name="ignore this")

qs = Event.objects.annotate(search=SearchVector("name"))

qs.filter(search="test query")
# <QuerySet [Event('test query'), Event('tESt qUEry'), Event('test not a query')]>

# Use a SearchQuery to search for them together:

qs.filter(search=SearchQuery("test query", search_type="phrase"))
# <QuerySet [Event('test query'), Event('tESt qUEry')]>

Вы можете напрямую использовать этот запрос. qs = Event.objects.filter(name__icontains="test q") Если у вас есть несколько слов для поиска, вы можете использовать Q следующим образом.

qs = Event.objects.filter(
Q(name__icontains="test q")| Q(name__icontains="test queue")
)
Вернуться на верх