MySQL 全文インデックスガイド

MySQL 全文インデックスガイド

全文インデックスには特別なクエリ構文が必要です。全文検索はインデックスの有無にかかわらず実行できますが、インデックスが存在すると一致速度が向上します。全文インデックスのインデックスは、ドキュメント内の検索キーワードに対応するコンテンツを見つけやすくするために、特別な構造で保存されます。私たちの日常生活において、最も一般的な全文検索はインターネット検索エンジンです。 Web 検索エンジンのデータは非常に大きく、リレーショナル データベースは通常使用されませんが、原理は似ています。

フルテキスト インデックスでは、文字ベースの検索 (CHAR、VARCHAR、および TEXT タイプの列) がサポートされ、自然言語モード (自然言語モード、デフォルト) とブール モード (ブール モード) もサポートされます。たとえば、「データベース エンジン」を検索すると、「データベース」、「エンジン」、「データベース エンジン」を含むコンテンツが取得されます。全文インデックスの実装には多くの制限があり、非常に複雑です。ただし、MySQL サーバーに組み込まれており、多くのアプリケーションの要件を満たすことができるため、広く使用されています。

MySQL 5.6 より前のバージョンでは、MyISAM ストレージ エンジンのみがフルテキスト インデックスをサポートしていました。フルテキスト インデックスを作成するには、以下のコンテンツ列のように、フルテキスト インデックスとしてマークする列を指定する必要があります。

テーブル t_news を作成します (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL 主キー、
	コンテンツテキスト、
	著者 VARCHAR(32)、
	タイトル VARCHAR(128)、
  全文(コンテンツ)
)ENGINE=InnoDB;

MySQL 5.6 より前は、中国語検索のサポートはあまり良くありませんでした。単語の分割を自分で実行し、段落を単語に前処理してからデータベースに保存する必要がありました。 MySQL 5.7.6 以降には、単語セグメンター ngram が組み込まれています。 Ngram は単語セグメントの長さの設定をサポートしており、長さによって中国語を異なる単語に分割できます (あまりスマートではありませんが、ほとんどのシナリオに対応します)。 MySQL グローバル変数 ngram_token_size を使用して単語の分割長を設定できます。デフォルト値は 2 で、1 ~ 10 のオプションがサポートされています。上記の例では、フルテキスト インデックスを構築するにはワード ブレーカーを指定する必要があります。

テーブルt_newsを作成します(
  id INT UNSIGNED AUTO_INCREMENT NOT NULL 主キー、
	コンテンツテキスト、
	著者 VARCHAR(32)、
	タイトル VARCHAR(128)、
  フルテキストキー idx(content) とパーサー ngram
)ENGINE=InnoDB;

データ テストを挿入します。

`t_news` に挿入 
(`id`、`content`、`author`、`title`) 
VALUES ('1'、'データベースとエンジンがあります'、'島のコーダー'、'データベース エンジン');

単純なあいまい検索では、LIKE を使用して検索を完了できますが、全文検索の場合は、次のステートメントを使用する必要があります。

t_newsから*を選択 
WHERE MATCH (コンテンツ) AGAINST (自然言語モードの「データ エンジン」)

この方法では、挿入されたばかりのコンテンツを取得できますが、これは LIKE では不可能です。また、関連性による並べ替えや別のデータの挿入もサポートしています。

`t_news` に挿入
(`id`、`content`、`author`、`title`) 
値 (2、「データベースがあります」、「島のコーダー」、「データベース」)

次に、並べ替えクエリを実行します。

SELECT *、MATCH (コンテンツ) AGAINST ('データエンジン') AS 関連性
t_newsより 
WHERE MATCH (コンテンツ) AGAINST ('データ エンジン') 
関連性ASCで並べ替え

ここでは、一致する値が列として照会され、エイリアスを使用して並べ替えることができます。相関が高いほど、対応する関連性の値が大きくなるため、並べ替えに使用できます。投資が無関係の場合、関連性の値は 0 になります。

ブールモードでは、+ を使用して一致する結果を保持したり、- を使用して一致する結果を除外したりするなど、より詳細な制御が可能になります。次の例では、データは一致しますが、エンジンを含むデータは除外されます。その他の演算子については、MySQL の公式ドキュメント「フルテキスト インデックス演算子」を参照してください。

t_newsから*を選択 
WHERE MATCH (content) AGAINST ('+data*-engine' IN BOOLEAN MODE);

上記はMySQL全文インデックス使用ガイドの詳細な内容です。MySQL全文インデックスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL全文インデックスの原理と欠点
  • MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?
  • MySQL全文インデックスを使用して検索エンジンのサンプルコードの簡易版を実現する
  • MySQLが全文インデックス共有を実現
  • MySQL フルテキストインデックスアプリケーションに関する簡単なチュートリアル
  • MySQL全文インデックスに基づく詳細な理解

<<:  Vueアイコンセレクターのサンプルコード

>>:  CSSの使用に関する深い理解 clear:both

推薦する

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

docker-compsoe を使用してフロントエンドとバックエンドを分離したプロジェクトをデプロイする方法

事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...

Web ベースの電子メール コンテンツの HTML フォーマット標準の概要

1. ページ要件1) 標準のヘッダーとフッターを使用するXML/HTML コードコンテンツをクリップ...

Ubuntu 16.04 64ビット版を3つのステップで32ビットプログラムと互換性を持たせる

ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...

Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明

序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...

MySQL 5.7 のインストールと設定のチュートリアル

この記事では、参考までにMySQLのインストールと設定のチュートリアルを紹介します。具体的な内容は次...

GolangでMySQLデータベースを操作するための実装コード

序文Golang は、SQL データベースにアクセスするための database/sql パッケージ...

MySQL トランザクション制御フローと ACID 特性

目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...

MySql の忘れたパスワードの変更方法はバージョン 5.7 以上に適しています

1. まずmysqld.exeプロセスを停止します2. cmd を開き、mysql の bin ディ...

Vueリストレンダリングキーの原理と機能の詳細な説明

目次リストレンダリングキーの原理と機能主要原則の分析キーの役割要約するリストレンダリングキーの原理と...

5分でReactルーティングについてお教えします

目次ルーティングとは純粋コンポーネントの基本的な使用純粋なコンポーネントの使用に関する注意事項ルーテ...

よくある HTML タグの記述エラー

HTML Police がコードを調べて意味のないタグをすべて見つけ出すので、注意を払う必要がありま...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

MySQL データベースの鉄則 (要約)

適切なデータベース仕様は、ソフトウェア実装の複雑さを軽減し、通信コストを削減するのに役立ちます。この...

MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます

データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...