RediSearch 2.0 hiện đã có bản xem trước công khai! Hầu hết các tính năng trong bản phát hành mới quan trọng này đều được thúc đẩy bởi phản hồi của bạn, với trọng tâm là cải thiện trải nghiệm của nhà phát triển và nâng cao khả năng mở rộng. Nhưng bài đăng trên blog này tập trung vào việc giúp bạn bắt đầu sử dụng khả năng lập chỉ mục dữ liệu mới của RediSearch 2.0 và các cách tốt hơn để tạo chỉ mục.
Có một công cụ tổng hợp và truy vấn phong phú bên trong cơ sở dữ liệu Redis của bạn sẽ mở ra cánh cửa cho nhiều ứng dụng mới vượt xa bộ nhớ đệm. Bạn có thể sử dụng Redis làm cơ sở dữ liệu chính của mình ngay cả khi bạn cần truy cập dữ liệu bằng cách sử dụng các truy vấn phức tạp mà không làm tăng thêm độ phức tạp cho mã để cập nhật và lập chỉ mục dữ liệu. Tất cả những điều này với tốc độ, độ tin cậy và khả năng mở rộng nổi tiếng của Redis!
Để biết thêm về tính năng mới, hãy xem Giới thiệu RediSearch 2.0
Bắt đầu
Điều kiện tiên quyết
Để bắt đầu với RediSearch 2.0, bạn cần:
- Docker
- Giao diện dòng lệnh Redis. Hai lựa chọn chính của bạn là:
- redis-cli, được cung cấp bởi Redis
- RedisInsight, một GUI miễn phí để phát triển ứng dụng Redis được sắp xếp hợp lý, cũng bao gồm giao diện dòng lệnh.
Tải cơ sở dữ liệu Redis với RediSearch được bật
Bạn có thể cài đặt và sử dụng RediSearch 2.0 theo nhiều cách khác nhau:
- Redis Enterprise Cloud
- Phần mềm Redis Enterprise
- Tìm kiếm lại các tệp nhị phân
- Tìm kiếm lại các nguồn
- Hình ảnh Docker
Để đơn giản, bài đăng trên blog này sẽ sử dụng các hình ảnh Docker. (Nếu bạn đã cài đặt RedisSearch 2.0, bạn có thể chuyển sang phần tiếp theo.) Để bắt đầu phiên bản Redis của bạn với Docker, hãy mở một terminal và chạy lệnh sau:
> docker run -it --rm --name redis-search-2 \ -p 6379:6379 \ redis / redisearch:2.0.0
Lưu ý: Vùng chứa sẽ tự động bị xóa khi nó thoát (tham số –rm).
Kết nối với Redis và chèn dữ liệu
Sử dụng ứng dụng Redis yêu thích của bạn, kết nối với cơ sở dữ liệu RediSearch.
Nếu bạn đã bắt đầu phiên bản Redis của mình với Docker, bạn có thể sử dụng lệnh sau để sử dụng redis-cli được nhúng vào vùng chứa:
> docker execute -it redis-search-2 redis-cli
Nếu bạn muốn sử dụng Redis Insight, hãy thêm phiên bản RediSearch của bạn và chuyển đến CLI.
Chèn dữ liệu
Bây giờ bạn đã sẵn sàng để chèn một số dữ liệu. Ví dụ này sử dụng dữ liệu phim được lưu trữ dưới dạng Redis Hashes, vì vậy hãy chèn một vài bộ phim:
> HSET movie:11002 title "Star Wars:Episode V - The Empire Strikes Back" cốt truyện "Luke Skywalker bắt đầu huấn luyện Jedi với Yoda." release_year 1980 Thể loại "Hành động" đánh giá 8,7 phiếu bầu 1127635 (số nguyên) 6> Phim HSET:11003 Tiêu đề "The Godfather" Âm mưu "Vị tộc trưởng lão thành của một triều đại tội phạm có tổ chức chuyển giao quyền kiểm soát đế chế cho con trai mình." Rele_year 1972 thể loại "Drama" xếp hạng 9,2 phiếu bầu 1563839 (số nguyên) 6
Cơ sở dữ liệu bây giờ chứa hai Hashes. Thật đơn giản để truy xuất thông tin bằng lệnh sau, nếu bạn biết khóa của phim ( movie:11002 ):
> HMGET movie:11002 title rating1) "Star Wars:Episode V - The Empire Strikes Back" 2) "8.7"
Nhưng làm cách nào bạn có thể truy vấn cơ sở dữ liệu để lấy danh sách phim dựa trên title , thể loại hoặc release_year ?
Với cấu trúc dữ liệu Redis “cốt lõi”, bạn phải tự quản lý chỉ mục của mình bằng cách sử dụng Bộ để liên kết thể loại với danh sách ID phim và thêm nhiều mã vào ứng dụng của bạn để quản lý và truy vấn chỉ mục.
Nhưng với RediSearch, bạn có thể chỉ cần xác định một chỉ mục được liên kết với dữ liệu của mình và để cơ sở dữ liệu quản lý chúng. Sau đó, bạn có thể sử dụng công cụ truy vấn để truy vấn / tìm kiếm dữ liệu bằng cách sử dụng các chỉ mục phụ.
Tạo chỉ mục RediSearch cho phim
Để tạo chỉ mục, bạn phải xác định lược đồ để liệt kê các trường và kiểu của chúng được lập chỉ mục và bạn có thể sử dụng trong các truy vấn của mình.
Đối với ví dụ này, bạn sẽ lập chỉ mục bốn trường:
- Tiêu đề
- Năm phát hành
- Xếp hạng
- Thể loại
Việc tạo chỉ mục được thực hiện bằng cách sử dụng FT.CREATE lệnh:
> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_nămTuy nhiên, trước khi chạy các truy vấn, hãy xem xét kỹ hơn FT.CREATE lệnh:
- idx:movie :tên của chỉ mục mà bạn sẽ sử dụng khi thực hiện các truy vấn
- BẬT hàm băm :kiểu cấu trúc được lập chỉ mục. (Lưu ý rằng RediSearch 2.0 chỉ hỗ trợ cấu trúc Hash, nhưng tham số này sẽ cho phép RediSearch lập chỉ mục các cấu trúc khác trong tương lai.)
- PREFIX 1 “movie:” :tiền tố của các khóa cần được lập chỉ mục. Đây là danh sách, vì vậy chúng tôi chỉ muốn lập chỉ mục phim:* khóa số là 1. Nếu bạn muốn lập chỉ mục phim và chương trình truyền hình với các trường giống nhau, bạn có thể sử dụng:PREFIX 2 “movie:” “tv_show:”
- SCHEMA… :xác định lược đồ, các trường và kiểu của chúng để lập chỉ mục. Như bạn có thể thấy trong lệnh, chúng tôi đang sử dụng các tham số TEXT, NUMERIC, TAG và SORTABLE.
Công cụ RediSearch 2.0 sẽ quét cơ sở dữ liệu bằng cách sử dụng các giá trị PREFIX và cập nhật chỉ mục dựa trên định nghĩa lược đồ. Điều này giúp dễ dàng thêm chỉ mục vào ứng dụng hiện có sử dụng Hashes, không cần phải thay đổi mã của bạn.
Bạn có thể xem thông tin chỉ mục bằng lệnh sau:
> FT.INFO idx:movie 1) index_name 2) idx:movie ... 46) 1) global_idle 2) (integer) 0 ...
Bây giờ chúng tôi đã sẵn sàng để sử dụng chỉ mục và truy vấn cơ sở dữ liệu.
Truy vấn cơ sở dữ liệu phim
Đối với phần này, bạn sẽ sử dụng FT.SEARCH lệnh và cú pháp của nó; lưu ý rằng mục tiêu của bài đăng trên blog này là giúp bạn bắt đầu, vì vậy chúng tôi bám sát những điều cơ bản và không đi sâu vào tất cả các chi tiết. Để tìm hiểu thêm về RediSearch, hãy xem tài liệu và hướng dẫn.
Truy vấn tìm kiếm toàn văn bản
RediSearch là một công cụ tìm kiếm toàn văn bản, cho phép ứng dụng chạy các truy vấn mạnh mẽ trên Google. Ví dụ:để tìm kiếm tất cả các phim có chứa “ chiến tranh Thông tin liên quan đến ”, bạn sẽ chạy lệnh sau:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating1) (integer) 12) "movie:11002" 3) 1) "title" 2) "Star Wars:Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
Như bạn có thể thấy, bộ phim Chiến tranh giữa các vì sao:Episode V — Đế chế tấn công trở lại được tìm thấy, mặc dù bạn chỉ sử dụng từ “ chiến tranh ”Để khớp với“ Wars " trong tiêu đề. Điều này là do tiêu đề đã được lập chỉ mục dưới dạng văn bản, vì vậy trường được mã hóa và có gốc.
Ngoài ra, lệnh không chỉ định một trường, vì vậy từ “chiến tranh” ( và các từ liên quan ) được tìm kiếm trong tất cả các trường văn bản của chỉ mục. Nếu bạn muốn tìm kiếm các trường cụ thể, bạn sẽ sử dụng @field ký hiệu, như được hiển thị ở đây:
> FT.SEARCH idx:movie "@title:war" QUAY LẠI 3 tiêu đề phát hành_ xếp hạng năm
Bạn có thể chạy các truy vấn tìm kiếm toàn văn bổ sung dựa trên tập dữ liệu đơn giản này, như được minh họa ở đây (Lưu ý:để giữ cho tài liệu ngắn gọn, kết quả của các truy vấn không được hiển thị):
Đối sánh tiền tố:
> FT.SEARCH idx:movie "emp *" QUAY LẠI 3 tiêu đề phát hành_ xếp hạng năm
Tìm kiếm mờ:
> FT.SEARCH idx:movie "% gdfather%" QUAY LẠI 3 tiêu đề phát hành_ xếp hạng năm
Công đoàn:
> FT.SEARCH idx:movie "war |% gdfather%" TRỞ LẠI 3 tiêu đề phát hành_ xếp hạng năm
Bạn có thể tìm thêm thông tin về cú pháp truy vấn trong tài liệu RediSearch.
Tìm kiếm trường thẻ
Sử dụng trường thẻ “thể loại” để tìm tất cả phim “chính kịch”:
> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating1) (integer) 12) "movie:11003" 3) 1) "title" 2) "The Godfather" 3) " release_year "4)" 1972 "5)" rating "6)" 9.2 "
Cú pháp @field:{value} cho biết rằng bạn đang tìm kiếm trong một trường thẻ. Bạn có thể tìm thêm thông tin về bộ lọc thẻ trong tài liệu RediSearch.
Cập nhật cơ sở dữ liệu và truy vấn
Cho đến nay, tất cả dữ liệu bạn đang truy vấn đã được tạo trước khi lập chỉ mục và được lập chỉ mục trong quá trình tạo chỉ mục. Hãy thay đổi mọi thứ bằng cách thêm một bộ phim mới:
> HSET "movie:11005" title "Chiến tranh giữa các vì sao:Tập VI - Sự trở lại của Jedi" cốt truyện "Quân nổi dậy tiêu diệt Ngôi sao Tử thần của Đế chế." Rele_year 1983 thể loại "Hành động" xếp hạng 8,3 phiếu bầu 906260 (số nguyên) 6
Bạn có thể sử dụng lại các truy vấn trước đó:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating1) (integer) 22) "movie:11005" 3) 1) "title" 2) "Star Wars:Episode VI - Return of the Jedi" 3) "release_year" 4) "1983" 5) "rating" 6) "8.3" 4) "movie:11002" 5) 1) "title" 2) "Star Wars:Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
Như bạn có thể thấy, phim mới đã được lập chỉ mục tự động.
Tương tự, nếu bạn xóa hoặc hết hạn một bộ phim, chỉ mục sẽ tự động được cập nhật, như được hiển thị ở đây:
> EXPIRE "phim:11002" 15 (số nguyên) 1
Nếu bạn đợi 15 giây và chạy truy vấn tìm kiếm, bạn sẽ thấy phim đã bị xóa khỏi chỉ mục.
Điều này khá mạnh khi bạn muốn thực hiện tìm kiếm tạm thời và để cơ sở dữ liệu quản lý việc hết hạn của dữ liệu và chỉ mục. Bạn có thể tìm thêm thông tin về tìm kiếm tạm thời trong bài đăng blog của chúng tôi đưa ra Trường hợp tìm kiếm phù du.
Tôi có thể đi đâu từ đây?
Bài đăng này đã chia sẻ một số kiến thức cơ bản về RediSearch và cho thấy dữ liệu lập chỉ mục minh bạch như thế nào so với mã ứng dụng của bạn. Chức năng này là mới trong RediSearch 2.0, vì trong RediSearch 1.x, các nhà phát triển phải sử dụng đặc biệt FT.ADD lệnh để lập chỉ mục dữ liệu.
Ngoài chức năng tìm kiếm và lập chỉ mục được thảo luận trong bài đăng blog này, RediSearch cũng bao gồm các khả năng tổng hợp dữ liệu mạnh mẽ, được đề cập trong tài liệu RediSearch, hướng dẫn và khóa học trực tuyến.
Hướng dẫn chứa cùng một dữ liệu, nhưng với một tập dữ liệu lớn hơn và nhiều truy vấn mẫu và tổng hợp hơn. Nó cũng chứa một ứng dụng chỉ ra cách sử dụng RediSearch với các ngôn ngữ lập trình như Java, Python và Node.js. Để tìm hiểu thêm, hãy xem các tài nguyên bổ sung sau:
- Trang web Tìm kiếm lại
- Hướng dẫn RediSearch 2.0
- Khám phá lại các trường hợp sử dụng và dự án