Computer >> Máy Tính >  >> Lập trình >> Redis

Tìm kiếm hoạt động lại

Redis có một tập hợp các cấu trúc dữ liệu linh hoạt, từ các Chuỗi đơn giản cho đến các cấu trúc trừu tượng mạnh mẽ như Luồng Redis. Các kiểu dữ liệu gốc có thể khiến bạn mất nhiều thời gian, nhưng có một số trường hợp sử dụng nhất định có thể yêu cầu giải pháp thay thế. Một ví dụ là yêu cầu sử dụng các chỉ mục phụ trong Redis để vượt ra ngoài tìm kiếm / tra cứu dựa trên khóa để có khả năng truy vấn phong phú hơn. Mặc dù bạn có thể sử dụng Bộ đã sắp xếp, Danh sách, v.v. để hoàn thành công việc, nhưng bạn sẽ cần phải đánh đổi một số yếu tố.

Vào RediSearch! Có sẵn dưới dạng mô-đun Redis, RediSearch cung cấp khả năng tìm kiếm linh hoạt, nhờ vào công cụ lập chỉ mục thứ cấp hạng nhất. Nó cung cấp các tính năng mạnh mẽ như Tìm kiếm toàn văn, tự động hoàn thành, lập chỉ mục địa lý và nhiều tính năng khác.

Để chứng minh sức mạnh của RediSearch, bài đăng trên blog này cung cấp một ví dụ thực tế về cách sử dụng RediSearch với Azure Cache cho Redis với sự trợ giúp của dịch vụ Go được xây dựng bằng ứng dụng RediSearch Go. Nó được thiết kế để cung cấp cho bạn một bộ ứng dụng cho phép bạn nhập các tweet trong thời gian thực và truy vấn chúng một cách linh hoạt bằng cách sử dụng RediSearch.

Cụ thể, bạn sẽ học cách:

  • Làm việc với các chỉ mục RediSearch
  • Sử dụng các loại dữ liệu RediSearch khác nhau, chẳng hạn như TEXT, NUMERIC, TAG và các loại khác
  • Cách tạo một ứng dụng để hiển thị các khả năng của RediSearch
  • Cách triển khai các thành phần dịch vụ cho Azure chỉ bằng một vài lệnh
  • Phân tích dữ liệu tweet bằng cách truy vấn RediSearch

Tổng quan về ứng dụng

Như đã đề cập, dịch vụ ví dụ cho phép bạn sử dụng các tweet trong thời gian thực và cung cấp chúng để truy vấn thông qua RediSearch.

Tìm kiếm hoạt động lại

Nó có hai thành phần:

  1. Người tiêu dùng / Người lập chỉ mục: Đọc từ API luồng Twitter, tạo chỉ mục và liên tục thêm dữ liệu tweet (trong Redis HASHes) khi chúng đến.
  2. Dịch vụ tìm kiếm: API REST cho phép bạn tìm kiếm các tweet bằng cú pháp truy vấn RediSearch.

Tại thời điểm này, tôi sẽ đi sâu vào cách thiết lập và vận hành giải pháp để bạn có thể thấy nó hoạt động. Tuy nhiên, nếu bạn muốn hiểu cách hoạt động của các thành phần riêng lẻ, vui lòng tham khảo phần Hướng dẫn về mã bên dưới và repo GitHub cho blog này:https://github.com/abhirockzz/redisearch-tweet-analysis.

Điều kiện tiên quyết

  1. Để bắt đầu, bạn cần có tài khoản MicrosoftAzure:tải một tài khoản miễn phí tại đây!
  2. Các thành phần dịch vụ được liệt kê ở trên sẽ được triển khai cho các Phiên bản vùng chứa Azure bằng cách sử dụng các lệnh Docker CLI gốc. Khả năng này được kích hoạt bằng cách tích hợp giữa Docker và Azure.
  3. Bạn sẽ cần Docker Desktop phiên bản 2.3.0.5 trở lên, dành cho Windows, macOS hoặc cài đặt CLI Tích hợp Docker ACI dành cho Linux. Để sử dụng Twitter Streaming API, bạn cũng cần có tài khoản nhà phát triển Twitter. Nếu bạn chưa có, hãy làm theo các hướng dẫn sau. RediSearch đang hoạt động!

Bắt đầu bằng cách sử dụng hướng dẫn bắt đầu nhanh này để thiết lập bộ đệm ẩn cấp Redis Enterprise trên Azure. Sau khi hoàn tất thiết lập, hãy đảm bảo rằng bạn có sẵn tên máy chủ Redis và khóa truy cập:

Tìm kiếm hoạt động lại

Cả hai thành phần của dịch vụ của chúng tôi đều có sẵn dưới dạng vùng chứa Docker:dịch vụ lập chỉ mục Tweet và dịch vụ API tìm kiếm. (Nếu bạn cần tạo hình ảnh Docker của riêng mình, vui lòng sử dụng Dockerfile tương ứng có sẵn trên repo GitHub.)

Bây giờ, bạn sẽ thấy việc triển khai các phiên bản này vào Phiên bản vùng chứa Azure thuận tiện như thế nào, cho phép bạn chạy các vùng chứa Docker theo yêu cầu trong môi trường Azure được quản lý, không máy chủ.

Triển khai tới Azure

Một docker -omp.yml tệp xác định các thành phần riêng lẻ ( tweets-search tweets-indexer ). Tất cả những gì bạn cần làm là cập nhật nó để thay thế các giá trị cho phiên bản Azure Redis cũng như thông tin đăng nhập tài khoản nhà phát triển Twitter của bạn. Đây là toàn bộ tệp:

Tạo bối cảnh Azure:

Sao chép repo GitHub:

Triển khai cả hai thành phần dịch vụ như một phần của nhóm vùng chứa:

(Lưu ý rằng các lệnh Docker Compose hiện có sẵn trong ngữ cảnh ACI bắt đầu bằng docker compost . Đó là KHÔNG giống với docker -omp bằng dấu gạch ngang. )

Bạn sẽ thấy một kết quả tương tự như sau:

Chờ các dịch vụ bắt đầu, bạn cũng có thể kiểm tra cổng Azure. Khi cả hai dịch vụ đều hoạt động và hoạt động, bạn có thể kiểm tra nhật ký tương ứng của chúng:

Nếu mọi việc suôn sẻ, dịch vụ tweet-tiêu dùng lẽ ra phải khởi động. Nó sẽ đọc một dòng tweet và lưu giữ chúng với Redis.

Khoảnh khắc của sự thật!

Đã đến lúc truy vấn dữ liệu tweet. Để làm như vậy, bạn có thể truy cập API REST trong Phiên bản vùng chứa Azure bằng địa chỉ IP và tên miền đủ điều kiện (FQDN) (đọc thêm trong Truy cập vùng chứa). Để tìm IP, hãy chạy docker ps và kiểm tra PORTS trong đầu ra (như hình dưới đây):

Bây giờ bạn có thể chạy tất cả các loại truy vấn! Trước khi đi sâu vào, đây là một ý tưởng nhanh về các thuộc tính được lập chỉ mục mà bạn có thể sử dụng trong các truy vấn tìm kiếm của mình:

(Lưu ý, tôi sử dụng curl trong các ví dụ bên dưới, nhưng rất muốn giới thiệu “REST Client” cho VS Code)

Đặt URL cơ sở cho API dịch vụ tìm kiếm:

Bắt đầu đơn giản và truy vấn tất cả các tài liệu (sử dụng *):

Bạn sẽ thấy một kết quả tương tự như sau:

Lưu ý các tiêu đề Kích thước trang Search-Hits :đây là những tiêu đề tùy chỉnh được chuyển từ ứng dụng, chủ yếu để chứng minh phân trang và giới hạn. Để trả lời cho truy vấn “lấy cho tôi tất cả tài liệu”, chúng tôi đã tìm thấy 12 kết quả trong Redis, nhưng phần thân JSON trả về 10 mục nhập. Điều này là do hoạt động mặc định của API RediSearch Go mà bạn có thể thay đổi bằng cách sử dụng tham số truy vấn khác nhau, chẳng hạn như:

Hoặc, ví dụ, tìm kiếm các tweet được gửi từ iPhone:

Không phải lúc nào bạn cũng có thể muốn tất cả các thuộc tính trong kết quả truy vấn. Ví dụ:đây là cách chỉ lấy lại người dùng (tên màn hình Twitter) và văn bản tweet:

Làm thế nào về một truy vấn về tên người dùng (ví dụ:bắt đầu bằng jo):

Bạn cũng có thể sử dụng kết hợp các thuộc tính trong truy vấn:

Làm thế nào về việc chúng tôi tìm kiếm các tweet với các thẻ bắt đầu bằng # cụ thể? Có thể sử dụng nhiều thẻ bắt đầu bằng # (được phân tách bằng dấu |) không?

Muốn biết có bao nhiêu tweet bằng biden hashtag được tạo gần đây? Sử dụng truy vấn phạm vi:

Nếu bạn may mắn lấy được một số thông tin tọa độ trên các tweet, bạn có thể thử trích xuất chúng và sau đó truy vấn về tọa độ thuộc tính:

Đây chỉ là vài ví dụ. Vui lòng thử nghiệm thêm và thử các truy vấn khác. Phần này trong tài liệu RediSearch có thể hữu ích!

Quan trọng: Sau khi bạn hoàn thành, đừng quên dừng các dịch vụ và các vùng chứa tương ứng trong Phiên bản vùng chứa Azure:

Sử dụng Azure Portal để xóa phiên bản Azure Redis mà bạn đã tạo.

Xem qua mã

Phần này cung cấp tổng quan cấp cao về mã cho các thành phần riêng lẻ. Điều này sẽ giúp điều hướng mã nguồn trong repo GitHub dễ dàng hơn.

Tweets người tiêu dùng / người lập chỉ mục:

thư viện go-twitter đã được sử dụng để tương tác với Twitter.

Nó xác thực với API phát trực tuyến của Twitter:

Và lắng nghe một luồng tweet trong một quy trình riêng:

Lưu ý đến index.AddData (tweetToMap (tweet)) - đây là nơi mà thành phần lập chỉ mục được gọi. Nó kết nối với Azure Cache cho Redis:

Sau đó, nó giảm chỉ mục (và cả các tài liệu hiện có) trước khi tạo lại nó:

Chỉ mục và các tài liệu liên quan của nó bị loại bỏ để cho phép bạn bắt đầu với trạng thái sạch, điều này giúp việc thử nghiệm / demo dễ dàng hơn. Bạn có thể chọn bình luận về phần này nếu bạn muốn.

Thông tin cho mỗi tweet được lưu trữ trong một HASH (có tên tweet: ) bằng cách sử dụng HSET hoạt động:

Tìm kiếm trên tweet cho thấy một API REST để truy vấn RediSearch. Tất cả các tùy chọn (bao gồm cả truy vấn, v.v.) được chuyển dưới dạng các tham số truy vấn. Ví dụ: https:// localhost:8080 / search? Q =@ source:iphone . Nó trích xuất các tham số truy vấn bắt buộc:

q tham số là bắt buộc. Tuy nhiên, bạn cũng có thể sử dụng các tham số sau để tìm kiếm:

  • trường:để chỉ định thuộc tính nào bạn muốn trả về trong kết quả và,
  • offset_limit:nếu bạn muốn chỉ định khoảng lệch từ nơi bạn muốn tìm kiếm và số lượng tài liệu mà bạn muốn đưa vào kết quả (theo mặc định, offset là 0 và giới hạn là 10 - theo ứng dụng khách RediSearch Go).

Ví dụ:

Cuối cùng, kết quả được lặp lại và trả lại dưới dạng JSON (mảng tài liệu):

Đó là tất cả cho phần này!

Các cấp Redis Enterprise trên Azure Cache dành cho Redis

Redis Enterprise có sẵn dưới dạng dịch vụ gốc trên Azure dưới dạng hai tầng mới cho Azure Cache dành cho Redis được điều hành và hỗ trợ bởi Microsoft và Redis. Dịch vụ này cung cấp cho các nhà phát triển quyền truy cập vào một bộ tính năng phong phú của Redis Enterprise, bao gồm các mô-đun như RediSearch. Để biết thêm thông tin, hãy xem các tài nguyên sau:

  • Azure Cache cho Redis, Các cấp doanh nghiệp hiện đã khả dụng phổ biến
  • Tăng cường quan hệ đối tác của chúng tôi với Microsoft để phát triển Redis Enterprise trên nền tảng đám mây
  • Microsoft và Redis hợp tác để cung cấp cho các nhà phát triển các tính năng mới của Azure Cache cho Redis
  • Các tính năng của Redis Enterprise trên Azure Cache dành cho Redis

Kết luận

Ứng dụng end-to-end này trình bày cách làm việc với các chỉ mục, nhập dữ liệu thời gian thực để tạo tài liệu (thông tin tweet) được lập chỉ mục bởi công cụ RediSearch và sau đó sử dụng cú pháp truy vấn linh hoạt để trích xuất thông tin chi tiết về các tweet đó.

Bạn muốn hiểu những gì xảy ra đằng sau hậu trường khi bạn tìm kiếm một chủ đề trên tài liệu Redis? Hãy xem bài đăng trên blog này để tìm hiểu cách trang Redis kết hợp tìm kiếm toàn văn với RediSearch! Hoặc, có lẽ bạn muốn khám phá cách sử dụng RediSearch trong một ứng dụng không có máy chủ?

Nếu bạn vẫn đang bắt đầu, hãy truy cập trang Bắt đầu nhanh RediSearch.

Nếu bạn muốn tìm hiểu thêm về các khả năng doanh nghiệp trong Azure Cache cho Redis, bạn có thể xem các tài nguyên sau:

  • Dự phòng nhiều vùng và cách thiết lập nó
  • Hỗ trợ Liên kết riêng để cách ly mạng
  • Chọn cấp bộ nhớ đệm phù hợp
  • Tính khả dụng cao cho các cấp Doanh nghiệp