Я хотел бы реализовать функцию поиска в приложении для ведения блога django. Статус-кво заключается в том, что у меня есть список строк, предоставленных пользователем, и набор запросов сужается каждой строкой, чтобы включать только те объекты, которые соответствуют строке.Как реализовать полнотекстовый поиск в Django?
См:
if request.method == "POST":
form = SearchForm(request.POST)
if form.is_valid():
posts = Post.objects.all()
for string in form.cleaned_data['query'].split():
posts = posts.filter(
Q(title__icontains=string) |
Q(text__icontains=string) |
Q(tags__name__exact=string)
)
return archive_index(request, queryset=posts, date_field='date')
Теперь, что если я не хочу делать конкатенации каждое слово, которое ищется на логическое И, но с логическим ИЛИ? Как мне это сделать? Есть ли способ сделать это с помощью собственных методов Queryset Django или нужно вернуться к необработанным SQL-запросам?
В общем, это правильное решение для полнотекстового поиска, подобного этому, или вы бы рекомендовали использовать поисковую систему, такую как Solr, Whoosh или Xapian. Каковы их преимущества?
Он должен использовать ИЛИ, если ему нужен полный текстовый поиск. Его код ясен, но описание немного запутанно. –
Но утверждения .filter() AND'ed вместе, не так ли? Таким образом, каждый аргумент поиска (слово) выполняется в заголовке сообщения или в содержимом ИЛИ в связанных тегах. Но чтобы показать результат, сообщение должно содержать все аргументы поиска в его заголовке ИЛИ теге ИЛИ ИЛИ. Это прекрасно и именно то, чего я хотел достичь. Мне просто интересно, как реализовать то, что результат нуждается только в одном из слов, присутствующих в одном из их атрибутов (не для всех). – jnns