Я использую 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 Полнотекстовый поиск для достижения того, что мне нужно?