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 ファイルがない場合の完璧なソリューション

推薦する

JavaScriptの詳細な説明 thisキーワード

目次1. はじめに2.これを理解する3. これは誰ですか? 4.矢印関数はさらに読む要約する1. は...

表の境界線の CSS 構文

<br />表の境界線の CSS 構文具体的な内容には、上境界線の幅、右境界線の幅、下境...

JavaScriptでよく使われる配列重複排除実戦ソースコード

アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...

初心者がHTMLタグを学ぶ(3)

関連記事:初心者が学ぶ HTML タグ (2)導入された HTML タグは、必ずしも XHTML 仕...

CocosCreatorでスワイプした位置にテクスチャを表示する方法

目次1. プロジェクト要件2. 文書の内容3. プロジェクト例4. プロジェクトコード1. プロジェ...

Mysql で group_concat の長さ制限を変更する方法

MySQL には、「group_concat」という関数があります。通常の使用では問題がないかもしれ...

Vueコンポーネントは、写真やビデオをアップロードするためのサンプルコードをカプセル化します

まず依存関係をダウンロードします: cnpm i -S vue-uuid ali-oss画像フィール...

HTML ページジャンプとパラメータ転送の問題

HTMLページジャンプ: window.open(url, "", "...

Docker ケース分析: Redis サービスの構築

目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...

PXEを使用してLinuxシステムを自動的に展開する方法

目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...

Vue 計算プロパティ実装トランスクリプト

この記事では、Vueの計算プロパティ実装レポートカードを参考に共有します。具体的な内容は次のとおりで...

Nginx で 403 forbidden を解決するための完全な手順

ウェブページに403 Forbiddenと表示されるNginx (yum インストール ログは通常 ...

16 の XHTML1.0 と HTML の互換性ガイドラインの概要

1.ページを XML タイプとして宣言しないでください。ページでは UTF-8 または UTF-16...

React でインデックスをキーとして使用することが推奨されないのはなぜですか?

1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...

記事では、js を使用して弾幕効果を実現する方法を説明します

目次新しい HTML ファイルを作成します。初期テンプレートを作成するHTML の追加CSS パディ...