Django полнотекстовый поиск: как сопоставить несколько слов в запросе - PullRequest
0 голосов
/ 24 марта 2020

Я использую SearchVector для поиска всех вхождений строки запроса, содержащейся хотя бы в одном из полей MyModel.

Я делаю это так, используя icontains:

   # search_fields is the list of MyModel fields
   MyModel.objects.annotate(
                search=SearchVector(*search_fields),
   ).filter(search__icontains=query)

и если у меня есть:

  m1 = MyModel(foo='foobar', bar = 'bar', baz = 'baz')
  m2 = MyModel(foo='fooooo', bar = 'barooo', baz = 'bazooo')
  m3 = MyModel(foo='fooxxx', bar = 'barxxx', baz = 'bazxxx')

Это прекрасно работает, если мой query является одним словом. Например,

  • foo возвращает m1, m2, m3
  • aro возвращает m2

Но я возникают проблемы, если query содержит более одного слова. Действительно:

  • foo bar ничего не возвращает вместо m1, m2, m3
  • aro azo ничего не возвращает вместо m2

Есть ли способ использовать Django Полнотекстовый поиск для достижения того, что мне нужно?

...