MySql ファジークエリ JSON キーワード取得ソリューションの例

MySql ファジークエリ JSON キーワード取得ソリューションの例

序文

最近、プロジェクトで次のような要件に遭遇しました。データ テーブル内の指定されたコンテンツを含む結果セットを取得する必要があります。このフィールドのデータ型はテキストで、保存されているコンテンツは json 形式です。具体的なテーブル構造は次のとおりです。

テーブル「product」を作成します(
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
	`name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '製品名' COLLATE 'utf8mb4_general_ci',
	`price` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '製品価格',
	`suit` TEXT NOT NULL COMMENT 'ストアIDを保存するための適用可能なストアJSON形式' COLLATE 'utf8mb4_general_ci',
	`status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT 'ステータス 1-正常 0-削除済み 2-リストから削除済み',
	`create_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'リリース時間',
	`update_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '変更時刻',
	BTREE を使用した主キー (`id`)
)
COMMENT='製品テーブル'
照合='utf8mb4_general_ci'
エンジン=InnoDB
AUTO_INCREMENT=1
;

表のデータは次のとおりです。

現在の要件: suit->hotel に 10001 を含むデータを検索します。

Google と Baidu で検索すると、次の解決策が見つかります。

オプション1:

'%"10001"%' のような適合する製品から * を選択します。
#Likeメソッドはインデックスを使用できず、パフォーマンスが悪く、精度が欠けています

オプション2:

select * from product where suit LOCATE('"10001"', 'suit') > 0;
# LOCATEメソッドにはLIKEメソッドと同じ問題がある

オプション3:

suit != '' かつ json_contains('suit'->'$.hotel', '"10001"') である product から * を選択します。
#MySQL 組み込みの json 関数を使用して検索します。サポートには MySQL 5.7 以上が必要で、高精度ですが、全文インデックスは使用できません。

オプション4(最終的に採用されたオプション):

select * from product where MATCH(suit) AGAINST('+"10001"' IN BOOLEAN MODE);
#フルテキスト インデックスを使用できます。MySQL キーワードのデフォルトの制限は少なくとも 4 文字です。mysql.ini で ft_min_word_len=2 を変更すると、再起動後に有効になります。

MATCH() AGAINST() の詳細な使用方法については、MySQL リファレンス マニュアルを参照してください。

https://dev.mysql.com/doc/refman/5.6/ja/fulltext-boolean.html

要約する

これで、MySql ファジー クエリ json キーワード検索ソリューション例に関するこの記事は終了です。より関連性の高い MySql json キーワード検索コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mysql クエリの結果セットを JSON データに変換するサンプル コード
  • MySQL で JSON 形式のフィールドをクエリする詳細な説明
  • MySQL json 形式のデータクエリ操作
  • MysqlクエリJSON結果に関連する関数の概要
  • MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?
  • MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド
  • Python クエリ mysql、json インスタンスを返す
  • mysql5.6 以前のデータベースで json をクエリする方法
  • Mysqlは保存されたJSON文字列内のデータを直接クエリします

<<:  独自の FTP および SFTP サーバーを構築するプロセスの紹介

>>:  HTML 画像 img タグ_Powernode Java アカデミー

推薦する

Mysql5.7.14 インストールと設定方法操作グラフィックチュートリアル(パスワード問題解決)

この記事は主に、以前のインストール方法を使用して MySQL 5.7.14 をインストールするときに...

アイデアを使用して Springboot 初期化サーバーを構築する際の問題分析

問題の説明最近、Springbootプロジェクトを構築していたところ、会社のネットワークケーブルに接...

MySQL ルート パスワードをリセットするときに発生する「不明な列 'password'」問題を解決する方法

夜にMACの電源を入れたところ、突然ルートアカウントがMySQLに正常にログインできなくなったため、...

MySQL の文字セットの不一致によって発生する異常な接続テーブルの解決方法

目次1. 解決策2. MySQLの文字セット文字セット検証ルール次のように簡単なテーブルクエリを実行...

vue-pdf はオンラインファイルプレビューを実現します

この記事では、参考までに、ファイルのオンラインプレビューを実現するためのvue-pdfの具体的なコー...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

MySQL レプリケーションの原理と実際のアプリケーションの詳細な説明

この記事では、例を使用して、MySQL レプリケーションの原理と実際のアプリケーションについて説明し...

Linux カーネル デバイス ドライバー 高度な文字デバイス ドライバーのメモ

/****************** * 高度な文字デバイス ドライバー ***********...

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理1. Dockerコンテナ方式1) Dockerが外部ネットワーク...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

Linux で ffmpeg をインストールするための詳細なチュートリアル

1. CentOS Linuxにffmpegをインストールする1.ダウンロードして解凍する http...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

iframe を使用して Web ページに他の Web ページを埋め込む方法

iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...

vue.js ルーターのネストされたルート

序文:ルートでは、主要部分は同じでも、基礎となる構造が異なることがあります。たとえば、ホームページに...

フロントエンドの面接でよく聞かれる JavaScript の質問の完全なリスト

目次1. 手書きのインスタンス2.配列のマップメソッドを実装する3. Reduceは配列のmapメソ...