MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字を区別しない) がサポートされています。

全文インデックスを作成するテーブルのストレージエンジンタイプはMyISAMである必要があります。

問題は、match against が中国語のあいまい検索をあまりサポートしていないことです。

新しい utf8 MyISAM テーブルを作成し、フルテキスト インデックスを作成します。

CREATE TABLE記事(
  id INT UNSIGNED AUTO_INCREMENT NOT NULL 主キー、
  タイトル VARCHAR(200)、
  本文テキスト、
  FULLTEXT (タイトル、本文)
) ENGINE=MyISAM デフォルト >

FULLTEXT(title, body) は、title 列と body 列の全文インデックスを作成します。後で検索するときは、必ず両方の列を指定してください。

このテーブルにテストデータを追加します

記事 (タイトル、本文) に値を挿入
  (「MySQL チュートリアル」、「DBMS は DataBase の略です...」)、
  (「MySQL をうまく使う方法」、「... を経験した後」)、
  (「MySQL の最適化」、「このチュートリアルでは次の内容を紹介します...」)、
  (「1001 MySQL トリック」、「1. mysqld を root として実行しないでください。2. ...」)、
  ('MySQL vs. YourSQL','次のデータベース比較では...'),
  ('MySQL セキュリティ','適切に構成されている場合、MySQL ...');

全文検索テスト

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database'); 

MATCH (title, body) の値は、フルテキスト インデックスが作成された 2 つのフィールドである必要があることに注意してください。

MySQL が全文検索でサポートするデフォルトの文字長は 4 です。SHOW VARIABLES LIKE 'ft_min_word_len' を使用すると、指定された文字長を表示できます。また、MySQL 構成ファイル my.ini に ft_min_word_len = 2 などの行を追加して、my.ini の最小文字長を変更することもできます。変更後、MySQL を再起動します。

さらに、MySQL は次のように単語の重みを計算して、結果セットに表示されるかどうかを決定します。

MySQL は、まずセットとクエリ内の適切な各単語の重みを計算します。複数のドキュメントに出現する単語は、この特定のセットでは意味的価値が低いため、重みが低くなります (重みがゼロになる場合もあります)。それ以外の場合、単語が少ないと重みが高くなります。MySQL のデフォルトのしきい値は 50% です。上記では、「you」はすべてのドキュメントに出現するため、100% です。結果セットには 50% 未満の単語のみが表示されます。

全文検索構文

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple -banana' IN BOOLEAN MODE);

AND を示します。つまり、含める必要があることを意味します。 - は NOT を意味し、含まれていないことを意味します。

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('apple banana' IN BOOLEAN MODE);

apple と banana の間にはスペースがあり、これは OR、つまり少なくとも apple と banana のどちらか 1 つが含まれていることを意味します。

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple banana' IN BOOLEAN MODE);

リンゴは必ず含める必要がありますが、バナナも含めると、リンゴの重みが高くなります。

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple ~banana' IN BOOLEAN MODE);

~ はおなじみの排他的論理和演算子です。返されるレコードにはリンゴが含まれている必要がありますが、バナナも含まれている場合は重みが減ります。 しかし、これは +apple -banana ほど厳密ではありません。後者は banana が含まれている場合は何も返さないからです。

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);

リンゴとバナナの両方、またはリンゴとオレンジの両方を含むレコードを返します。しかし、リンゴとバナナの両方を含むレコードの重みは、リンゴとオレンジの両方を含むレコードの重みよりも高くなります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL全文検索の使用法

<<:  React Nativeプロジェクトフレームワークの構築経験

>>:  Linux で rc.local ファイルがない場合の完璧なソリューション

推薦する

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

MySQLの権限とインデックスの詳細な説明

mysql の権限とインデックスmysql の最高権限ユーザーは root です。 CREATE U...

Vue で PC 解像度の適応を実装するためのサンプルコード

目次プラン依存関係をインストールする依存関係の導入pxをremに変換するFlexible.jsを変更...

Nginx/Httpd ロードバランシング Tomcat 設定チュートリアル

前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...

Ubuntu 14 に Nginx-RTMP ストリーミング サーバーをインストールするチュートリアル

1. RTMP RTMP ストリーミング プロトコルは、Adobe が開発したリアルタイムのオーディ...

モバイルレイアウトにvw+remを使用する方法

まだ rem フレキシブルレイアウトを使用していますか?圧縮された js コードの大きなセクションを...

Element-UIの10の驚くべきトリックのまとめ

目次el-scrollbar スクロールバーel-uploadはクリックをシミュレートしますel-s...

ミニプログラムはミニプログラムクラウドを使用してWeChatの支払い機能を実装します

目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....

ウェブページの再設計の7つの主要要素 ウェブページの再設計の7つの主要要素を共有する

Shopify Plus は、私たちが設立した e コマース プラットフォームのエンタープライズ バ...

HTML で色を表すには、6 桁の 16 進コード、RGB、またはキーワードを使用します。

HTML で色を表す方法は 3 つありますが、最もよく使われるのは 6 桁の 16 進コード表現です...

クールな充電アニメーションを実現する純粋なCSS

CSS のみを使用してどのような充電アニメーション効果を作成できるかを見てみましょう。バッテリーを...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

dockerでPostgreSQLを実行する方法

1. Dockerをインストールします。参考URL: Docker 入門インストールチュートリアル ...

docker の実行に必要な権限の分析

Docker を実行するには root 権限が必要です。非 root ユーザーに docker コマ...

バックエンドの権限に基づいてナビゲーション メニューを動的に生成する Vue-router のサンプル コード

目次js の1. グローバルガードを登録する2. Vuex 状態管理グローバルキャッシュルート3. ...