Thiết lập gợi ý tìm kiếm (auto-complete) bằng Redisearch

Thiết lập gợi ý tìm kiếm (auto-complete) bằng Redisearch

Tin ngắn hàng ngày dành cho bạn
  • Cũng giống như 12 Days of OpenAI - một chuỗi sự kiện diễn ra trong 12 ngày liên tiếp của OpenAI, mỗi ngày họ sẽ giới thiệu một công cụ "đột phá", và cứ như thế.

    DeepSeek đã bắt "trend" ngay sau đó với chuỗi 202502 Open-Source Week diễn ra ngay trong tuần sau. Mỗi ngày họ sẽ công bố một công cụ mã nguồn mở, trái được hoàn toàn với tính "Open" của AI. Chúng ta hãy chờ xem họ mang đến những dự án thú vị nào nhé 🤓. Chắc sẽ hấp dẫn lắm đây vì ai cũng biết từ lúc ra mô hình R1, Deepseek đã chiếm trọn tin tức nổi bật trên toàn thế giới.

    » Xem thêm
  • Grok 3 beta vừa ra mắt và cho mọi người dùng thử miễn phí có giới hạn số lần trong ngày (tài khoản trả phí hình như được dùng nhiều hơn). Trong đó có 2 tính năng nổi bật là Think và DeepSearch.

    Think thì chắc ai cũng biết hoặc dùng ở một số mô hình suy luận như ở ChatGPT rồi. Còn DeepSearch thì mới hơn, gõ điều bạn muốn vào thì nó sẽ tự lên mạng tìm kiếm thông tin rồi tổng hợp lại kết quả mà nó tìm thấy được. Khá hay nhưng chắc để tham khảo hoặc muốn tổng hợp thông tin nhanh chóng thôi chứ vẫn nên tự mình tìm kiếm thông tin 😅

    » Xem thêm
  • Có 2 phần mềm tiện ích cho Mac mà mỗi khi dùng máy Mac Mini hoặc Macbook có cắm thêm màn hình rời, thêm bàn phím với chuột nữa là BetterDisplayMac Mouse Fix. Đi qua từng cái nhé!

    BetterDisplay giúp tinh chỉnh kích thước của màn hình rời để đạt độ phân giải HiDPI. Như bạn biết Mac khá kén màn hình và tuỳ chọn độ phân giải trong cài đặt mặc định rất ít ỏi, nên BetterDisplay cung cấp nhiều lựa chọn phù hợp hơn.

    Cái thứ hai là Mac Mouse Fix, nếu dùng chuột ngoài bạn sẽ thấy nó cuộn không giống với Trackpad của Macbook cho lắm. Điều kì diệu xảy ra khi cài phần mềm này vào. Nó thêm hiệu ứng "smooth" và giúp cuộn chuột y như cuộn bằng Trackpad luôn. Thật thần kỳ.

    » Xem thêm

Vấn đề

Tìm kiếm là một trong những tính năng quan trọng trên bất kì trang web nào. Thông qua chức năng tìm kiếm, người dùng có thể dễ dàng khám phá nội dung trang web của bạn hơn.

Có nhiều cách để cung cấp cho người dùng tính năng tìm kiếm. Chẳng hạn như chúng ta phân danh mục cho họ lựa chọn hoặc đặt các thẻ (tags) để sàng lọc nội dung, hoặc cung cấp một ô tìm kiếm cho họ thoải mái nhập nội dung tuỳ ý.

Ngày nay trải nghiệm người dùng ngày càng được đặt lên hàng đầu, nhiệm vụ của người quản trị là phải làm sao cho người dùng ít phải động tay động chân nhất. Nhất là không phải để họ phải phân vân khi sử dụng một tính năng nào đó trên trang web, vì điều đó sẽ tăng tỉ lệ khách hàng rời đi. Nếu bạn đã cung cấp tính năng tìm kiếm thì liệu có thể làm gì để người dùng cảm thấy tìm kiếm hữu ích hơn?

Lấy một ví dụ trang web của bạn bán rất nhiều phụ kiện thời trang và một trong số đó đang là sản phẩm trending có tên như "đồng hồ thời trang", "đồng hồ siêu nhân"... Vậy thì làm sao khi người dùng chỉ cần nhập "đồng" thì lập tức những từ khoá bạn thiết lập từ trước sẽ hiện ra gợi ý cho người dùng?

Auto-completion

Auto-completion

Auto-completion là một tính năng mà Redisearch cung cấp để gợi ý tìm kiếm. Cách hoạt động của Auto-completion rất đơn giản đó là bạn tạo ra một chỉ mục dành riêng cho việc gợi ý ra những cụm từ phù hợp với từ khóa cần tìm kiếm.

RediSearch cũng cho phép gợi ý mờ, nghĩa là bạn có thể nhận được kết quả cho từ khoá ngay cả khi người dùng mắc lỗi chính tả. Điều này đạt được bằng cách sử dụng Levenshtein Automaton, cho phép tìm kiếm hiệu quả trong Khoảng cách Levenshtein. Sau đó, các đề xuất được tính trọng số dựa trên cả điểm số (score) và khoảng cách Levenshtein của chúng so với từ khoá do người dùng nhập.

Tuy nhiên, việc tìm kiếm mờ (đặc biệt là các tiền tố rất ngắn) sẽ cho ra một số lượng lớn các gợi ý. Trên thực tế, tìm kiếm mờ cho bất kỳ chữ cái đơn lẻ nào sẽ duyệt qua toàn bộ từ điển, vì vậy bạn nên sử dụng tính năng này một cách cẩn thận, vì sử dụng chúng phải đánh đổi tốc độ tìm kiếm cũng như tài nguyên máy chủ.

Cách thiết lập

Chúng ta chỉ cần tạo ra các chỉ mục dùng cho tính năng gợi ý, xác định điểm (score) để ưu tiên mức độ hiển thị kết quả cho kết quả tìm kiếm.

Ví dụ trong blog của tôi có các bài viết liên quan đến chủ đề Node.js, một trong số đó là các bài "node.js là gì, node.js event loop, node.js tự học..." nên tôi muốn khi người dùng nhập vào tìm kiếm "node.js" thì nó sẽ gợi ý ra những cụm từ trên.

127.0.0.1:6379> FT.SUGADD article "node.js là gì" 100
(integer) 1

127.0.0.1:6379> FT.SUGADD article "node.js event loop" 200
(integer) 2

127.0.0.1:6379> FT.SUGADD article "node.js tự học" 300
(integer) 3

Sau đó thử tìm kiếm gợi ý:

127.0.0.1:6379> FT.SUGGET article "node.js" MAX 5 WITHSCORES
node.js tự học
106.06601715087891
node.js event loop
57.735027313232422
node.js là gì
37.79644775390625

MAX 5 là lấy 5 kết quả đầu tiên, WITHSCORES là hiển thị điểm, điểm càng cao thì càng được ưu tiên. Sở dĩ thứ tự kết quả như trên là lúc thêm suggest tôi đã xác định điểm của "node.js tự học" là cao nhất (300) rồi giảm dần cho các cụm từ sau.

Suggest hỗ trợ tìm kiếm khi người dùng nhập sai ký tự. Ví dụ "nodejs", "nopejs", "nope.js"... nhờ vào thuật toán tính toán khoảng cách Levenshtein. Tuy nhiên đi cùng với đó là vấn đề hiệu suất sẽ giảm đi đôi chút. Để áp dụng chỉ cần thêm từ khóa FUZZY vào trong câu truy vấn.

127.0.0.1:6379> FT.SUGGET article "nope.js" FUZZY MAX 5 WITHSCORES
node.js tự học
106.06601715087891
node.js event loop
57.735027313232422
node.js là gì
37.79644775390625

Auto-completion hiện tại chỉ hỗ trợ từ khóa prefix, tức là chỉ gợi ý được nếu từ khóa đầu vào là những từ ở đầu các cụm từ. Như ví dụ trên, redis chỉ gợi ý được khi tìm kiếm "no", "node", "node.js"... chứ không thể tìm kiếm các từ "event", "là"... Hy vọng các bản cập nhật tiếp theo Auto-completion sẽ hỗ trợ tìm kiếm ở bất kì vị trí nào trong cụm từ.

Để nghiên cứu nhiều hơn bạn có thể xem thêm ở Redis Auto-completion.

Tổng kết

Gợi ý tìm kiếm là tính năng hữu ích mà rất nhiều trang web đang sử dụng. Thông qua cách đó giúp nâng cao trải nghiệm người dùng dựa trên những từ khoá mà người dùng quan tâm để gợi ý đến một cụm từ cụ thể hơn. Những cụm từ đó có thể là "hot trend" hay nội dung chủ lực của website của bạn mong muốn được người dùng quan tâm, khám phá.

Auto-completion của Rediseach còn mang lại nhiều lợi ích hơn dựa vào tính sáng tạo của bạn. Chẳng hạn tự động hoá chỉ mục tìm kiếm liên tục cập nhật các cụm từ gợi ý dựa theo dữ liệu tìm kiếm thu thập được của người dùng để tạo thành "hot trend" tìm kiếm.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (1)

Nội dung bình luận...
Avatar
Thành Đỗ2 năm trước
Nghĩa là mình vẫn phải tạo một index rồi thêm data tìm kiếm vào chứ nó không dựa theo data sẵn có được à bạn
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
Đúng rồi bạn ơi, tính năng này chỉ hỗ trợ tạo data trong index để hỗ trợ suggest thôi