Нужна помощь в создании поискового представления и как применить в HTML странице из БД, которую я создал - Django

Я создаю сайт с DJANGO, где люди вставляют слова и ассоциации, как запомнить это слово. Я построил часть вставки слова.

Сейчас я застрял на части реализации поиска слов и извлечения информации из БД.

def Search_word(request):
search = request.POST.get("search", False)
if search in Words.English_word:
    return HttpResponseRedirect("/polls/")
else:
    return HttpResponseRedirect("/polls/")

если вы хотите искать только в одном поле, Django поддерживает поиск, который намного лучше и точнее, чем contains

words = Words.objects.filter(English_word__search = search_term)

но если вы хотите иметь какую-то функциональность, подобную поисковой системе, вы можете использовать PostgreSQL с функцией полнотекстового поиска в Django

в model.py добавьте эти команды

from django.contrib.postgres.search import SearchVector

в вашей модели яслей:

def full_search(self, search_term):
      return self.annotate( 
            search=SearchVector('English_word') + 
            SearchVector('blog__tagline')).filter(search=seach_term)

этот метод удалит <in/at/is/the/...> другие английские слова и будет искать только с помощью алгоритмов word-to-vector

если вам приходится работать с ранжированием результатов поиска:

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

vector = SearchVector('english_word')
query = SearchQuery(search_term)
Word.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')

это аннотирует результаты на основе их вероятности соответствия поисковому запросу.

Кстати, лучшей практикой является использование менеджеров моделей и избегание ORM вещей в представлениях.

Документы Django по поиску: https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/

Вернуться на верх