Использование иконок для поисковых запросов с пробелами в 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")
)