TairSearchは、キャッシュ機能とコンピューティング機能の両方を提供するリアルタイムのメモリ内検索モジュールです。 モジュールのコア機能として、転置インデックスはホットデータの保存と単語ルートによるファジーマッチクエリの両方をサポートします。 これにより、データストレージとコンピューティングを統合し、複数列のインデックスを使用してクエリを高速化できます。
背景情報
通常、インターネットおよび従来の業界におけるアプリケーションサービスの重要なデータは、MySQLなどのリレーショナルデータベースに格納されます。 データベースアクセスの負荷を減らし、クエリ効率を向上させるために、Redisのようなキー値キャッシュシステムを使用してホットデータをクエリします。 ただし、通常のキー値キャッシングシステムは、複数列のインデックスを持つクエリまたはLIKE
ベースのファジーマッチクエリに対して独立して機能することはできません。 この場合、複数列のインデックスを使用してクエリを実装するには、Luaスクリプトやオンディスクコンピューティングなどの追加のフィルタリングメカニズムが必要です。
通常、リレーショナルデータベースからRedisなどのキー値キャッシュシステムにデータをインポートする場合、行はハッシュに格納されます。 これらの行の主キーがハッシュキーとして使用されます。 これらの行の他のフィールドおよびそれらの値は、ハッシュフィールドおよびそれらの値として使用される。
HMGET
コマンドを実行して、特定のフィールドの情報をクエリできます。 リレーショナルデータベースを使用すると、プライマリキーインデックス、複数のセカンダリインデックス、および複数列インデックスを作成して、クエリ効率を向上させることができます。 それに比べて、Redisには次のシナリオで制限があります。- セカンダリインデックスを使用したクエリ: Redisはハッシュフィールドによるクエリを許可しません。 したがって、リレーショナルデータベースのセカンダリインデックスを格納するには、2層のハッシュ構造を作成する必要があります。 ただし、この2層のハッシュ構造では、Redisへのデータのインポートが複雑になり、データの冗長性によりメモリが無駄になります。
- 複数列のインデックスを使用したクエリ: Redisでは、ハッシュに対する複数列のクエリは許可されません。 複数列クエリは、Luaスクリプトまたはオンディスクコンピューティングによってのみ実装できます。
正確な航空券検索の例
祝日には、人気のある観光地へのフライトを大量に検索した結果、交通量が急増する可能性があります。 この場合、TairSearchを使用してフライト情報を保存できます。
ドキュメントインデックスの作成
この例では、正確な航空券検索には、出発地、目的地、出発日、座席クラス、および幼児と一緒に旅行するか子供と一緒に旅行するかなどのキーワードが含まれます。
出発地_目的地
) として、出発地と目的地の組み合わせが使用されます。 キー値の例: zhuhai_hangzhou
。 以下のインデックスフィールドが作成される: 出発
、目的地
、日付
、座席
、with
、flight_id
、価格
、出発地_時間
、および目的地_時間
。 TFT.UPDATEINDEX
コマンドを実行します。 TFT.CREATEINDEX zhuhai_hangzhou '{
"mappings":{
"properties":{
"departure":{"type":"keyword"} 、
"destination":{"type":"キーワード"} 、
"date":{"type":"キーワード"} 、
"seat":{"type":"キーワード"} 、
"with":{"type":"キーワード"} 、
"flight_id":{"type":"キーワード"} 、
"price":{"type":"double"} 、
"departure_time":{"type":"long"} 、
"destination_time":{"type":"long"}
}
}
}'
OK
TairSearchドキュメントへのデータの書き込み
TFT.ADDDOC zhuhai_hangzhou '{
"出発":"珠海" 、
"destination":"hangzhou" 、
"date":"2022-09-01" 、
"シート":"ファースト" 、
"with":"baby" 、
"flight_id":"CZ1000" 、
"price":986.1、
"departure_time":1661991010、
"destination_time":1661998210
} '
"{"_id ":" 16615908912020060 "}"
# ドキュメントIDはJSON形式で返されます。
フライト情報を正確に検索
2022年9月1日に珠海から杭州に出発する予定のファーストクラスの座席を持つフライトを検索します。 出発時刻の順にフライトを表示します。 サンプルコード:
TFT.Search zhuhai_hangzhou '{"sort":["departure_time"] 、"query":{"bool":{"must":[{"term":{"date":"2022-09-01" }}},{ "term":{"seat":"first"}}]}}}'
'"{
"hits": {
"hits": [
{
"_id": "16615908912020060" 、
"_index": "zhuhai_hangzhou" 、
"_score": 0.433955、
"_source": {
"出発": "珠海" 、
"destination": "hangzhou" 、
"date": "2022-09-01" 、
"シート": "ファースト" 、
"with": "baby" 、
"flight_id": "CZ1000" 、
"price": 986.1、
"departure_time": 1661991010、
"destination_time": 1661998210
}
}
],
"max_score": 0.433955、
"total": {
"relation": "eq" 、
"value": 1
}
}
}"