Tôi muốn triển khai chức năng tìm kiếm trong ứng dụng viết blog django. Hiện trạng là tôi có một danh sách các chuỗi được cung cấp bởi người dùng và bộ truy vấn được thu hẹp bởi mỗi chuỗi để chỉ bao gồm các đối tượng khớp với chuỗi đó.Làm thế nào để thực hiện tìm kiếm toàn văn trong Django?
Xem:
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')
Bây giờ, những gì nếu tôi không muốn làm tiếp nhau mỗi từ được tìm kiếm bởi một logic AND nhưng với một logic OR? Tôi sẽ làm như thế nào? Có cách nào để làm điều đó với phương pháp Queryset riêng của Django hay không phải là một trong những để trở lại truy vấn SQL nguyên?
Nói chung, đây có phải là giải pháp thích hợp để thực hiện tìm kiếm văn bản đầy đủ như thế này hay bạn khuyên bạn nên sử dụng công cụ tìm kiếm như Solr, Whoosh hoặc Xapian. Lợi ích của chúng là gì?
Anh ấy nên sử dụng HOẶC nếu anh ấy muốn tìm kiếm toàn văn. Mã của anh ấy rõ ràng, nhưng mô tả hơi khó hiểu. –
Nhưng các câu lệnh .filter() được AND cùng nhau, phải không? Vì vậy, mỗi đối số tìm kiếm (từ) được tìm kiếm trong tiêu đề của bài HOẶC nội dung HOẶC trong các thẻ có liên quan. Nhưng để hiển thị kết quả, một bài đăng cần phải có tất cả các đối số tìm kiếm trong tiêu đề HOẶC nội dung hoặc thẻ của nó. Điều đó tốt và chính xác những gì tôi muốn đạt được. Tôi chỉ tò mò về cách để thực hiện một kết quả chỉ cần một trong những từ được trình bày trong một trong các thuộc tính của họ (không phải tất cả chúng). – jnns