Hướng dẫn tìm kiếm trên Vinahentai: cách dùng tìm kiếm thường và tìm kiếm nâng cao chi tiết nhất
Trên Vinahentai hiện có hai hướng tìm truyện chính: tìm kiếm thường ở /search và tìm kiếm nâng cao ở /search/advanced. Nếu bạn chỉ nhớ một phần tên truyện, tên tác giả hoặc tên nhóm dịch, tìm kiếm thường là nhanh nhất. Nếu bạn muốn khoanh kết quả theo nhiều thể loại, loại trừ tag, lọc oneshot hay sắp xếp lại thứ tự kết quả, bạn nên dùng tìm kiếm nâng cao.
1. Khi nào nên dùng tìm kiếm thường, khi nào nên dùng tìm kiếm nâng cao?
Cách chia đơn giản nhất là nhìn vào loại câu hỏi bạn đang có.
- Dùng tìm kiếm thường khi bạn đã có từ khóa khá rõ: tên truyện, tên khác, tên tác giả, tên dịch giả, hoặc một keyword nổi bật.
- Dùng tìm kiếm nâng cao khi bạn chưa biết chính xác tên truyện, nhưng biết mình muốn xem truyện theo tổ hợp điều kiện như thể loại, tình trạng, oneshot hoặc cách sắp xếp.
- Dùng kết hợp cả hai khi từ khóa chung quá rộng: tìm trước ở trang thường, sau đó bấm nút “Tìm kiếm nâng cao” để chuyển sang màn hình nâng cao và giữ nguyên từ khóa hiện tại.
Đây cũng là đúng flow trong code: ở trang tìm kiếm thường, nút chuyển sang nâng cao sẽ tự xây URL sang /search/advanced?q=... nếu bạn đang có từ khóa trong ô tìm kiếm.
2. Cách dùng tìm kiếm thường từng bước
Mở trang tìm kiếm thường, nhập từ khóa vào ô tìm kiếm và bấm nút kính lúp hoặc Enter. Form của trang này dùng method GET, nên từ khóa sẽ được ghi ngay lên URL dưới dạng ?q=.... Điều này có 2 lợi ích: bạn có thể bookmark lại kết quả và cũng dễ chia sẻ cho người khác.
Nếu ô tìm kiếm đang trống, loader trả về trạng thái rỗng và giao diện chỉ hiện thông báo “Nhập từ khóa để bắt đầu tìm kiếm truyện”. Nghĩa là mở trang xong chưa có kết quả là hành vi bình thường, không phải lỗi.
Sau khi có kết quả, mỗi item sẽ hiện:
- Ảnh bìa truyện
- Tên truyện
- Tên khác nếu có
- Các tag thể loại đã được map sang tên dễ đọc
- Số chương
- Lượt xem
Bấm vào item sẽ đi thẳng tới URL canonical của truyện, không tạo URL tìm kiếm trung gian.
3. Tìm kiếm thường thật sự tìm theo những gì?
Đây là phần nhiều người bỏ qua, nhưng rất quan trọng để tìm đúng. Theo flow hiện tại trong basic-search.server.ts, hệ thống không chỉ nhìn vào tên truyện.
Ở lớp tìm kiếm cơ bản, hệ thống cố gắng match lần lượt trên các nhóm dữ liệu sau:
- title: tên truyện chính
- alternateTitle: tên khác, tên thay thế
- keywords: từ khóa gợi nhớ hoặc alias
- author, authorNames, authorSlugs: tác giả
- translatorNames, translatorSlugs: nhóm dịch hoặc dịch giả
Cụ thể hơn, hệ thống thử text search trước. Nếu số lượng chưa đủ, nó mới chạy thêm lớp partial match bằng regex để lấp thêm kết quả còn thiếu. Vì vậy, ngay cả khi bạn gõ không đúng 100% tên truyện nhưng còn nhớ một chuỗi gần đúng, hệ thống vẫn có cơ hội trả ra đúng truyện.
Partial match hiện dùng kiểu ghép token theo thứ tự. Ví dụ bạn gõ nhiều từ, hệ thống sẽ tách thành token, rồi ghép thành regex dạng token1.*token2.*token3. Cách này hữu ích khi bạn nhớ cụm từ theo đúng thứ tự nhưng không nhớ đầy đủ dấu câu hoặc phần giữa.
4. Vì sao thứ tự kết quả lại như vậy?
Kết quả ở trang tìm kiếm thường không xếp ngẫu nhiên. Code hiện tại chấm điểm theo mức độ liên quan rồi mới lấy danh sách hiển thị.
Thứ tự ưu tiên tổng quát đang là:
- Tác giả khớp chính xác, rồi đến bắt đầu bằng từ khóa, rồi đến chứa từ khóa
- Dịch giả hoặc nhóm dịch khớp chính xác, rồi đến bắt đầu bằng từ khóa, rồi đến chứa từ khóa
- Tên truyện khớp chính xác, rồi đến bắt đầu bằng từ khóa, rồi đến chứa từ khóa
- Tên khác hoặc keyword khớp chính xác, rồi đến chứa từ khóa
Nói ngắn gọn: nếu bạn gõ tên tác giả hoặc nhóm dịch chuẩn, các kết quả có match ở nhóm đó thường được đẩy lên cao hơn match trong tên truyện. Khi 2 truyện có điểm ngang nhau, hệ thống ưu tiên truyện mới cập nhật hơn.
Ví dụ thực tế
Nếu bạn gõ tên của một dịch giả, đừng ngạc nhiên khi truyện do người đó dịch lên đầu dù tên truyện không chứa đúng từ khóa. Đó là chủ đích của thuật toán xếp hạng hiện tại.
5. Giới hạn 2 trang và cách xử lý khi từ khóa quá rộng
Tìm kiếm thường hiện đang giới hạn ở mức 40 kết quả mỗi trang, tối đa 2 trang, tức khoảng 80 kết quả. Đây là giới hạn được chốt rõ trong code bằng hằng số SEARCH_PAGE_SIZE = 40, SEARCH_MAX_TOTAL = 80 và MAX_PAGE = 2.
Điều đó có nghĩa là nếu bạn gõ một từ khóa rất rộng như tên tag phổ biến, tên nhân vật quá chung, hoặc từ khóa mơ hồ, bạn có thể không nhìn thấy toàn bộ kho truyện trong tìm kiếm thường dù hệ thống còn match sâu hơn trong database.
Khi gặp tình huống này, cách xử lý đúng là:
- Tìm bằng từ khóa rộng ở tìm kiếm thường
- Bấm nút Tìm kiếm nâng cao ở góc phải
- Giữ nguyên từ khóa cũ, sau đó thêm trạng thái hoặc thể loại để thu hẹp kết quả
Trên giao diện tìm kiếm thường, phần phân trang cũng chỉ có đúng Trang 1 và Trang 2, không dùng component phân trang đầy đủ như trang danh sách.
6. Cách dùng tìm kiếm nâng cao chi tiết
Trang tìm kiếm nâng cao phù hợp khi bạn muốn kiểm soát nhiều điều kiện một lúc. Flow chuẩn nên làm như sau:
Bước 1: Mở trang và hiểu trạng thái ban đầu
Khi mới mở trang, code chỉ tải danh sách thể loại, chưa query manga ngay. Vì vậy bạn sẽ chưa thấy kết quả nào cho tới khi bấm Áp dụng bộ lọc hoặc nhấn Enter. Đây là cơ chế có chủ đích để giảm truy vấn thừa.
Bước 2: Nhập tên truyện nếu có
Ô nhập trên cùng là tùy chọn, không bắt buộc. Nếu bạn nhớ một phần tên truyện, hãy nhập vào đây để kết hợp thêm với bộ lọc. Nếu không nhớ tên, bạn vẫn có thể bỏ trống và tìm thuần theo thể loại + trạng thái.
Bước 3: Chọn trạng thái
Bạn có 3 pill trạng thái:
- Đang tiến hành
- Đã hoàn thành
- Oneshot
Chạm vào pill nào là bật hoặc tắt ngay pill đó. Trạng thái đang chọn chỉ là draft tại client cho tới khi bạn bấm Áp dụng bộ lọc.
Bước 4: Chọn thể loại bao gồm
Khối “Thể loại bao gồm” dùng component chọn genre dạng lưới. Bạn có thể:
- Gõ nhiều từ khóa để lọc nhanh danh sách genre
- Gõ a,b,c hoặc nhiều chữ cái đơn để lọc theo chữ đầu
- Chuyển qua lại giữa EN và VI để nhìn tên thể loại ở 2 ngôn ngữ
- Chọn nhiều genre cùng lúc
Bước 5: Mở thêm thể loại loại trừ nếu cần
Phần “Thể loại loại trừ” đang là khối thu gọn. Nếu bạn muốn loại một số tag khỏi kết quả, bấm mở khối này rồi chọn genre cần loại. Đây là cách hữu ích khi bạn muốn giữ từ khóa rộng nhưng loại bỏ một nhóm nội dung mình không muốn xem.
Bước 6: Bấm Áp dụng bộ lọc
Sau khi bấm nút, code sẽ ghi các điều kiện lên URL như q, status, includeGenres, excludeGenres, đồng thời thêm apply=1 và reset page=1. Từ lúc đó loader mới truy vấn manga thật.
Bước 7: Duyệt kết quả và chuyển trang
Kết quả ở tìm kiếm nâng cao hiển thị theo dạng grid card và dùng component phân trang đầy đủ giống nhiều trang list khác của site. Bạn có thể đổi trang, nhảy thẳng tới một trang số hoặc đổi cách sắp xếp mà không cần làm lại từ đầu.
7. Hiểu đúng include, exclude, oneshot và trạng thái
Đây là chỗ dễ hiểu nhầm nhất nếu chỉ nhìn UI mà không đọc code.
Thể loại bao gồm là điều kiện AND
Trong loader, danh sách include được đưa vào query dưới dạng $all. Nghĩa là truyện phải chứa đồng thời toàn bộ genre bạn đã chọn, không phải chỉ cần có một genre bất kỳ là đủ.
Thể loại loại trừ là điều kiện loại bỏ theo nhóm
Exclude dùng $nin. Nghĩa là nếu truyện có bất kỳ genre nào thuộc danh sách loại trừ, truyện đó sẽ bị loại khỏi kết quả.
Không thể vừa include vừa exclude cùng một genre
Ở client, khi bạn chọn một genre vào include, code sẽ tự gỡ nó khỏi exclude nếu trước đó genre đó đang nằm bên exclude. Chiều ngược lại cũng vậy. Điều này giúp query luôn nhất quán.
Oneshot không phải sort, mà được biến thành genre include
Trạng thái oneshot không viết thành query trạng thái riêng. Thay vào đó, code đẩy thêm slug oneshot vào danh sách genre bao gồm. Vì vậy nếu bạn bật oneshot và đồng thời chọn thêm các thể loại khác, truyện phải thỏa cả tag oneshot lẫn các genre bạn đã chọn.
Nếu bật cả completed lẫn ongoing thì completed sẽ thắng
Đây là chi tiết rất nhỏ nhưng đúng theo code hiện tại: trong loader của tìm kiếm nâng cao, nếu completed được chọn thì query sẽ đặt userStatus = COMPLETED. Chỉ khi không có completed thì mới xét tới ongoing. Vì vậy khi bật cả hai, kết quả đang nghiêng theo completed.
8. Cách sắp xếp kết quả ở tìm kiếm nâng cao
Dropdown sắp xếp ở tìm kiếm nâng cao hiện có 5 lựa chọn, và mỗi lựa chọn map sang logic khác nhau trong loader:
- Mới cập nhật: sắp theo
updatedAtgiảm dần - Cũ nhất: sắp theo
updatedAttăng dần - Đọc nhiều: sắp theo
viewNumbergiảm dần - Đánh giá cao: sắp theo
ratingScore, sau đóratingTotalVotes, rồi tớiviewNumber - Đã hoàn thành: vừa ép filter completed, vừa sắp theo
updatedAtgiảm dần
Mỗi lần đổi cách sắp xếp, trang sẽ tự reset về page 1. Đây là chủ đích để bạn không bị ở lại một trang số sâu sau khi thay điều kiện mới.
9. Mẹo dùng nhanh để ra kết quả đúng hơn
- Nếu nhớ tên tác giả hoặc dịch giả, ưu tiên thử ở tìm kiếm thường trước vì thuật toán đang ưu tiên rất mạnh các match kiểu này.
- Nếu nhớ một cụm từ theo đúng thứ tự, hãy nhập liền mạch theo thứ tự đó thay vì đảo từ, vì partial regex đang ghép token theo trình tự bạn nhập.
- Nếu kết quả ra quá nhiều, đừng cố lật hết 2 trang ở tìm kiếm thường. Hãy chuyển qua nâng cao rồi thêm 1-2 thể loại để thu hẹp nhanh hơn.
- Nếu muốn rà thư viện theo nhiều điều kiện và còn cần phân trang đầy đủ, hãy dùng nâng cao hoặc xem thêm bài hướng dẫn dùng trang Danh sách.
- Khi tìm thể loại trong advanced search, bạn có thể gõ nhiều chữ cái hoặc nhiều từ khóa cùng lúc để lọc nhanh danh sách genre thay vì kéo tay rất lâu.
10. FAQ - Câu hỏi thường gặp
Vì sao tôi gõ từ khóa đúng mà truyện không nằm ở vị trí đầu?
Vì hệ thống có chấm điểm ưu tiên giữa tác giả, dịch giả, tên truyện và tên khác. Nếu một truyện khác match mạnh hơn ở nhóm tác giả hoặc dịch giả, truyện đó có thể đứng cao hơn tên truyện bạn đang nghĩ tới.
Tìm kiếm thường có hỗ trợ lật nhiều trang không?
Không. Hiện tại chỉ có tối đa 2 trang. Nếu cần đào sâu hơn, bạn nên chuyển sang tìm kiếm nâng cao để lọc hẹp ngay từ đầu.
Tôi có thể vừa chọn include vừa exclude cùng một thể loại không?
Không. UI sẽ tự bỏ thể loại đó khỏi nhóm còn lại để tránh xung đột query.
Tìm kiếm nâng cao có bắt buộc nhập tên truyện không?
Không bắt buộc. Bạn có thể bỏ trống ô tên và tìm hoàn toàn theo thể loại, trạng thái và cách sắp xếp.
11. Kết luận
Nếu bạn cần tìm nhanh, hãy bắt đầu ở tìm kiếm thường. Nếu bạn cần lọc sâu, hãy chuyển ngay qua tìm kiếm nâng cao để tận dụng include, exclude, oneshot và sort.
Điểm quan trọng nhất cần nhớ là: tìm kiếm thường có giới hạn 2 trang, còn tìm kiếm nâng cao chỉ chạy query sau khi bạn thật sự áp dụng bộ lọc. Nắm hai điểm này là bạn sẽ dùng tính năng tìm truyện trên Vinahentai nhanh và chính xác hơn rất nhiều.
Gợi ý tiếp: nếu bạn muốn học thêm cách duyệt kho truyện theo kiểu list, đổi sort và nhảy thẳng tới trang xa bằng ô nhập số + nút Đi, hãy xem bài hướng dẫn dùng trang Danh sách truyện.
Bài viết bởi Zeros · Cập nhật lần cuối: 5 tháng 5, 2026
