Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

RediSearch2.0入門

RediSearch 2.0が公開プレビューになりました!このメジャーな新しいリリースのほとんどの機能は、開発者のエクスペリエンスの向上とスケーラビリティの向上に重点を置いて、フィードバックによって推進されています。ただし、このブログ投稿は、RediSearch2.0の新しいデータインデックス機能とインデックスを作成するためのより良い方法の使用を開始するのに役立つことに焦点を当てています。

Redisデータベース内に豊富なクエリおよび集計エンジンがあると、キャッシングをはるかに超える多くの新しいアプリケーションへの扉が開かれます。複雑なクエリを使用してデータにアクセスする必要がある場合でも、データを更新およびインデックス付けするためのコードを複雑にすることなく、Redisをプライマリデータベースとして使用できます。これはすべて、Redisの有名な速度、信頼性、拡張性を備えています!

新機能の詳細については、をご覧ください。 RediSearch2.0の紹介

はじめに

前提条件

RediSearch 2.0の使用を開始するには、次のものが必要です。

  • Docker
  • Redisコマンドラインインターフェイス。 2つの主なオプションは次のとおりです。
    • redis-cli、Redisで提供
    • RedisInsightは、合理化されたRedisアプリケーション開発用の無料のGUIであり、コマンドラインインターフェイスも含まれています。

RediSearchを有効にしてRedisデータベースを取得する

RediSearch 2.0は、さまざまな方法でインストールして使用できます。

  • Redisエンタープライズクラウド
  • Redisエンタープライズソフトウェア
  • RediSearchバイナリ
  • RediSearchソース
  • Dockerイメージ

簡単にするために、このブログ投稿ではDockerイメージを使用します。 (すでにRedisSearch 2.0をインストールしている場合は、次のセクションにジャンプできます。)Dockerを使用してRedisインスタンスを起動するには、ターミナルを開いて次のコマンドを実行します。

> docker run -it --rm --name redis-search-2 \
   -p 6379:6379 \
   redis/redisearch:2.0.0

注: コンテナは終了時に自動的に削除されます(–rmパラメータ)。

Redisに接続してデータを挿入

お気に入りのRedisクライアントを使用して、RediSearchデータベースに接続します。

Dockerを使用してRedisインスタンスを起動した場合は、次のコマンドを使用して redis-cliを使用できます。 コンテナに埋め込まれています:

> docker exec -it redis-search-2 redis-cli

Redis Insightを使用する場合は、RediSearchインスタンスを追加して、CLIに移動します。

データを挿入

これで、いくつかのデータを挿入する準備が整いました。この例では、Redisハッシュとして保存されている映画データを使用しているので、いくつかの映画を挿入しましょう。

> HSET movie:11002 title "Star Wars: Episode V - The Empire Strikes Back" plot "Luke Skywalker begins Jedi training with Yoda." release_year 1980 genre "Action" rating 8.7 votes 1127635

(integer) 6 

> HSET movie:11003 title "The Godfather" plot "The aging patriarch of an organized crime dynasty transfers control of his empire to his son." release_year 1972 genre "Drama" rating 9.2 votes 1563839 

(integer) 6

データベースには2つのハッシュが含まれています。映画のキーがわかっている場合は、次のコマンドを使用して情報を簡単に取得できます( movie:11002 ):

> HMGET movie:11002 title rating

1) "Star Wars: Episode V - The Empire Strikes Back"
2) "8.7"

しかし、データベースにクエリを実行して、 titleを使用して映画のリストを取得するにはどうすればよいでしょうか。 、ジャンル 、または release_year

「コア」Redisデータ構造では、たとえば、セットを使用してインデックスを自分で管理し、ジャンルを映画IDのリストに関連付け、アプリケーションに多くのコードを追加して、インデックスを管理およびクエリする必要があります。

>

ただし、RediSearchを使用すると、データに関連付けられたインデックスを定義して、データベースに管理させることができます。次に、クエリエンジンを使用して、セカンダリインデックスを使用してデータをクエリ/検索できます。

映画のRediSearchインデックスを作成する

インデックスを作成するには、インデックスが作成され、クエリで使用できるフィールドとそのタイプを一覧表示するスキーマを定義する必要があります。

この例では、4つのフィールドにインデックスを付けます。

  1. タイトル
  2. リリース年
  3. 評価
  4. ジャンル

インデックスの作成は、 FT.CREATEを使用して行われます。 コマンド:

> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE rating NUMERIC SORTABLE genre TAG SORTABLE

OK

ただし、クエリを実行する前に、 FT.CREATEを詳しく見てみましょう。 コマンド:

  • idx:movie :クエリを実行するときに使用するインデックスの名前
  • ONハッシュ :インデックス付けされる構造のタイプ。 (RediSearch 2.0はハッシュ構造のみをサポートしますが、このパラメーターにより、RediSearchは将来的に他の構造にインデックスを付けることができます。)
  • PREFIX 1「映画:」 :インデックス付けする必要のあるキーのプレフィックス。これはリストなので、movie:*キーのみにインデックスを付けたいので、番号は1です。同じフィールドで映画とテレビ番組にインデックスを付ける場合は、次を使用できます。PREFIX 2“ movie:”“ tv_show:”
  • SCHEMA… :スキーマ、フィールド、およびインデックスを作成するタイプを定義します。コマンドでわかるように、TEXT、NUMERIC、TAG、およびSORTABLEパラメーターを使用しています。

RediSearch 2.0エンジンは、PREFIX値を使用してデータベースをスキャンし、スキーマ定義に基づいてインデックスを更新します。これにより、既存のアプリケーションにインデックスを簡単に追加できます ハッシュを使用するため、コードを変更する必要はありません。

次のコマンドでインデックス情報を確認できます:

> FT.INFO idx:movie

 1) index_name
 2) idx:movie
... 
46) 1) global_idle
    2) (integer) 0
...

これで、インデックスを使用してデータベースにクエリを実行する準備が整いました。

映画データベースのクエリ

このセクションでは、 FT.SEARCHを使用します コマンドとその構文。このブログ投稿の目的はあなたが始めることであることに注意してください。そのため、私たちは基本に固執し、すべての詳細に立ち入ることはしません。 RediSearchの詳細については、ドキュメントとチュートリアルをご覧ください。

全文検索クエリ

RediSearchは全文検索エンジンであり、アプリケーションがGoogleの強力なクエリを実行できるようにします。たとえば、「 war 」を含むすべての映画を検索するには、 」関連の情報については、次のコマンドを実行します。

> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating

1) (integer) 1
2) "movie:11002"
3) 1) "title"
   2) "Star Wars: Episode V - The Empire Strikes Back"
   3) "release_year"
   4) "1980"
   5) "rating"
   6) "8.7"

ご覧のとおり、映画スターウォーズエピソード5—帝国の逆襲war」という単語だけを使用したにもかかわらず、が見つかりました 」は「戦争」と一致します タイトルの」。これは、タイトルがテキストとしてインデックス化されているため、フィールドがトークン化されてステミングされているためです。

また、コマンドはフィールドを指定しないため、「war」という単語(および関連する単語 )は、インデックスのすべてのテキストフィールドで検索されます。特定のフィールドを検索する場合は、 @fieldを使用します ここに示すように、表記法:

> FT.SEARCH idx:movie "@title:war" RETURN 3 title release_year rating

ここに示すように、この単純なデータセットに対して追加の全文検索クエリを実行できます(注:ドキュメントを短くするために、クエリの結果は表示されません):

プレフィックスの一致:

> FT.SEARCH idx:movie "emp*" RETURN 3 title release_year rating

あいまい検索:

> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release_year rating

ユニオン:

> FT.SEARCH idx:movie "war |  %gdfather% " RETURN 3 title release_year rating

クエリ構文の詳細については、RediSearchのドキュメントをご覧ください。

タグフィールド検索

タグフィールド「ジャンル」を使用して、すべての「ドラマ」映画を検索します。

> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating

1) (integer) 1
2) "movie:11003"
3) 1) "title"
   2) "The Godfather"
   3) "release_year"
   4) "1972"
   5) "rating"
   6) "9.2"

構文@field:{value} タグフィールドで検索していることを示します。タグフィルターの詳細については、RediSearchのドキュメントをご覧ください。

データベースとクエリを更新する

これまでのところ、クエリしているすべてのデータはインデックスの前に作成され、インデックスの作成中にインデックスが付けられました。新しい映画を追加して状況を変えましょう:

> HSET "movie:11005" title "Star Wars: Episode VI - Return of the Jedi"  plot "The Rebels destroy the Empire's Death Star." release_year 1983 genre "Action" rating 8.3 votes 906260 

(integer) 6

以前のクエリを再利用できます:

> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating

1) (integer) 2
2) "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"

ご覧のとおり、新しい映画は自動的にインデックスに登録されています。

同様に、映画を削除または期限切れにすると、次のようにインデックスが自動的に更新されます:

> EXPIRE "movie:11002" 15

(integer) 1

15秒待って検索クエリを実行すると、映画がインデックスから削除されたことがわかります。

これは、一時的な検索を実行し、データベースにデータとインデックスの有効期限を管理させる場合に非常に強力です。エフェメラル検索の詳細については、エフェメラル検索の事例を紹介するブログ投稿をご覧ください。

ここからどこに行けますか?

この投稿では、RediSearchの基本のいくつかを共有し、データのインデックス作成がアプリケーションコードからどのように透過的であるかを示しました。この機能はRediSearch2.0の新機能です。これは、RediSearch 1.xでは、開発者が特に FT.ADDを使用する必要があったためです。 データにインデックスを付けるコマンド。

このブログ投稿で説明されている検索およびインデックス作成機能に加えて、RediSearchには、RediSearchのドキュメント、チュートリアル、およびオンラインコースで説明されている強力なデータ集約機能も含まれています。

チュートリアルには同じデータが含まれていますが、データセットが大きく、サンプルクエリと集計が多くなっています。また、Java、Python、Node.jsなどのプログラミング言語でRediSearchを使用する方法を示すアプリケーションも含まれています。詳細については、次の追加リソースをご覧ください。

  • RediSearchWebページ
  • RediSearch2.0チュートリアル
  • ユースケースとプロジェクトを再発見する

  1. ウェブ用の Android メッセージの使用を開始する

    Google は 1 つの巨大なプラットフォームであり、疑いの余地はありません。しかし、最高の検索エンジンの 1 つであるだけでなく、日常生活を楽にするさまざまなサービスも提供しています。 Google は最近、どの Web ブラウザからでもテキスト メッセージを送受信できる Android メッセージ アプリのアップデートをリリースしました。このサービスを使用すると、Android ユーザーは任意の PC または Mac に簡単にメッセージを送信できます。 開始するには、Android メッセージ アプリの更新バージョンが必要です。それが終わったら、Web サービスで Android メッ

  2. Xen 仮想化の開始

    Zで綴られるZenは、8時間保持した後、雪の中でおしっこをしているときに頭頂部にある典型的な感覚です. Xen は X で綴られており、KVM と同様に、企業市場を対象としていますが、家庭でもビジネスでもセットアップを検討できるオープンソースの仮想化テクノロジです。 KVM に関するいくつかのチュートリアルがあり、導入記事、ストレージとネットワーク (ブリッジ ネットワークを含む) のセットアップと構成の方法、および VirtualBox との競合の解決方法をカバーしています。ここで、Xen についてもう少し学びましょう。同様に、仮想マシンをインストールして実行するために必要な最初の手順、