ホームページ バックエンド開発 PHPチュートリアル mysql全文検索テクニック_PHPチュートリアル

mysql全文検索テクニック_PHPチュートリアル

Jul 21, 2016 pm 03:54 PM
mysql スキル 検索

<

バージョン 4.1.0-alpha の MySQL リファレンス マニュアル



--------------------- -------------------------------------------------- ---------

6.8 MySQL 全文検索

3.23.23 以降、MySQL は全文インデックス作成と検索のサポートを開始します。 MySQL のフルテキスト インデックスは FULLTEXT 型のインデックスです。 FULLTEXT インデックスは MyISAM テーブルで使用され、CREATE TABLE 時またはその後に ALTER TABLE または CREATE INDEX を使用して CHAR、VARCHAR、または TEXT カラムに作成できます。大規模なデータベースの場合、FULLTEXT インデックスを使用せずにテーブルにデータをロードし、ALTER TABLE (または CREATE INDEX) を使用してインデックスを作成すると非常に高速になります。すでに FULLTEXT インデックスがあるテーブルにデータをロードすると、非常に時間がかかります。

全文検索はMATCH()関数によって完了します。

mysql> CREATE TABLE 記事 (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY、
-> title VARCHAR(200)、
-> body TEXT、
-> FULLTEXT (title,body)
- > (NULL,'MySQL を効率的に使用する方法', '次のことを行った後...'),
-> (NULL,'MySQL の最適化','このチュートリアルでは...'),
- > (NULL,'1001 MySQL のコツ','1. root として mysqld を実行しないでください。2. ...'),
-> (NULL,'MySQL と YourSQL', '次のデータベース比較では ) .'),
-> (NULL,'MySQL セキュリティ', '正しく設定されている場合、MySQL ...');
クエリは OK、影響を受ける行は 6 件 (0.00 秒)
レコード: 6 重複: 0 警告: 0

mysql> SELECT * FROM 記事
--> WHERE MATCH (title,body) AGAINST ('database'); - -+---------------------------------------------- -+
| タイトル | 本文 -------------+ 5 | MySQL と YourSQL の比較|。
関数 MATCH() は、テキスト セット (インデックス内の 1 つ以上の列からなる FULLTEXT A 列セットに含まれる) を比較し、文字列の自然言語検索を実行します。検索文字列は AGAINST() の引数として与えられます。検索は、大文字と小文字を区別せずに実行されます。テーブル内の各行について、MATCH() は相関値を返します。つまり、検索文字列と、MATCH() リストで指定された列のレコード行のテキストとの間の類似性の尺度です。

WHERE 句で MATCH() が使用される場合 (上記の例を参照)、返された行は関連性の高いものから低いものの順に自動的に並べ替えられます。相関値は非負の浮動小数点数です。相関関係がゼロとは、類似性がないことを意味します。関連性は、行内の単語の数、行内の固有の単語の数、セット内の単語の合計数、および特定の単語を含むドキュメント (行) の数に基づいて計算されます。

論理パターン検索も実行できます。これについては、次のセクションで説明します。

前の例は、関数 MATCH() の使用に関するいくつかの基本的な手順です。行は類似性の高い順に返されます。

次の例は、明示的な類似度値を取得する方法を示しています。 WHERE 句も ORDER BY 句も存在しない場合、返される行は並べ替えられません。

mysql> 記事から id,MATCH (タイトル,本文) ('チュートリアル') を選択します。 ----- --------------------+
| (タイトル、本文) と一致します ('チュートリアル') | ----- -----------------------------------+ 1 | 0.64840710366884 | 2 | 0.66266459031789 | 0 ----------+
セット内の 6 行 (0.00 秒)

次の例は、より複雑。クエリは類似度を返しますが、類似度の降順で行を返します。この結果を達成するには、MATCH() を 2 回指定する必要があります。 MySQL オプティマイザは同じ MATCH() 呼び出しを 2 回認識し、全文検索コードを 1 回だけ呼び出すため、追加のオーバーヘッドは発生しません。

mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('MySQL を root として実行することによるセキュリティへの影響') AS スコア
-> FROM 記事 WHERE MATCH (title,body) AGAINST
-> ; ('MySQL を root として実行する場合のセキュリティへの影響'); --- -------+------+
| ID | 本文--------------- -------------+-----------------+
| 1. root として mysqld を実行しないでください。 1.5055546709332 | 6 | 適切に設定されている場合、MySQL ... -----------+---------------+
セット内の 2 行 (0.00 秒)

MySQL は非常に単純なパーサーを使用してテキストを分離します言葉に。 「単語」とは、テキスト、データ、「'」および「_」で構成される一連の文字です。ストップワード リストにある「単語」、または短すぎる (3 文字以下) 場合は無視されます。

セットとクエリ内のそれぞれの適切な単語は、セットとクエリ内の重要度に従って測定されます。このようにして、複数の文書に出現する単語の重みは低くなります (おそらく重みがゼロになることもあります)。これは、この特定のセットでは意味論的な値が低いためです。それ以外の場合、単語が小さい場合は重みが高くなります。次に、単語の重みを組み合わせて、レコード行の類似性を計算します。

このようなテクニックは大規模なセットでうまく機能します (実際、慎重に調和させられます)。非常に小さなテーブルの場合、単語の分類はその意味論的な値を適切に反映せず、場合によってはこのモデルが奇妙な結果を生み出す可能性があります。

mysql> SELECT * FROM Articles WHERE MATCH (title,body) AGAINST ('MySQL');
Empty set (0.00 sec)

上の例では、この単語が次のとおりであるため、検索用語 MySQL は結果を取得しませんでした。 in はレコード行の半分以上に現れます。したがって、これは事実上ストップワード (つまり、意味値がゼロの単語) として扱われます。これは理想的な動作です。自然言語クエリは 1 GB のテーブルから 2 行おきに返すべきではありません。

表内の行の半分に一致する単語は、関連するドキュメントが見つかる可能性が低いです。実際、無関係な文書が多数見つかる可能性があります。検索エンジンを通じてインターネット上で何かを検索しようとすると、このようなことが常に起こることは誰もが知っています。このため、この特定のデータセットでは、そのような行は低いセマンティック値に設定されます。

4.0.1 以降、MySQL は IN BOOLEAN MODE 修飾子を使用して論理全文検索を実行することもできます。

mysql> SELECT * FROM 記事 WHERE MATCH (title,body)
-> ('+MySQL -YourSQL' IN BOOLEAN MODE); ----------+---------------------------- -- -------+
ID | タイトル ---+---------------------------- ---------+
| MySQL チュートリアル MySQL を効率的に使用する方法
|このチュートリアルでは、...
| 1001 MySQL のトリックを説明します。 2. MySQL のセキュリティ | ---+---------------------- ------------------+--------------- ------------------- ------+

このクエリは、MySQL という単語を含むすべての行を返します (注: 50% のしきい値は使用されません)。ただし、YourSQL という単語は含まれていません。論理パターン検索では、類似した値の降順で行が自動的に並べ替えられないことに注意してください。上記の結果からわかるように、最も高い類似値 (MySQL を 2 回含む値) は最初ではなく最後にリストされます。論理全文検索は FULLTEXT インデックスがなくても機能しますが、速度は遅くなります。

論理全文検索では、次の演算子がサポートされています:

+
先頭のプラス記号は、返される各レコード行に単語が出現する必要があることを示します。

-
先頭のマイナス記号は、返される各レコード行にその単語が出現してはならないことを示します。

デフォルト (プラス記号もマイナス記号も指定されていない場合) では、単語はオプションですが、その単語を含む行が上位にランクされます。これは、IN BOOLEAN MODE 修飾子を使用しない MATCH() ... AGAINST() の動作を模倣します。

< >
これら 2 つの演算子は、単語の類似値の基本値を変更するために使用されます。 < 演算子は基本値を減少させ、> 演算子はそれを増加させます。以下の例を参照してください。

( )
括弧は部分式内の単語をグループ化するために使用されます。

~
先頭の否定記号は否定演算子のように機能し、行の類似性を引き起こす単語の基本値は負になります。ノイズの多い単語にラベルを付けるのに便利です。このような単語を含むレコードはランクが低くなりますが、- 演算子が使用できるため、完全に除外されるわけではありません。

*
アスタリスクは切り捨て演算子です。他の演算子とは異なり、単語の前ではなく単語に追加する必要があります。

「二重引用符で囲まれた
フレーズ」は、そのフレーズを含む行のみに一致します (文字通り、入力されたかのように)。
ここにいくつかの例があります:

アップルバナナ
上記の単語の少なくとも 1 つを含む行を検索
+アップル +ジュース
... 両方の単語が含まれます
+アップル マッキントッシュ
... 単語「リンゴ」が含まれていますただし、「macintosh」も含まれている場合は、上位にランクされます
+apple -macintosh
... 「apple」は含まれますが、「macintosh」は含まれません
+apple +(>pie が含まれます。 apple」と「pie」、または「apple」と「strudel」(順序は任意)ですが、「apple pie」は「apple strudel」よりも上位にランクされます
apple*
...「apple」、「apples」、 "applesauce" と "applet"
"some Words"
... "some Words of知恵" を含めることはできますが、"いくつかのノイズワード" は含めることはできません
6.8.1 全文制限
MATCH () 関数のすべてのパラメータは次のようにする必要がありますMATCH() が BOOLEAN MODE でない限り、同じテーブルの列であり、同じ FULLTEXT インデックスの一部である必要があります。

MATCH() 列リストは、 MATCH() が IN BOOLEAN MODE でない限り、テーブルの FULLTEXT インデックスで定義された列リストと正確に一致する必要があります。

AGAINST() のパラメータは定数文字列でなければなりません。
6.8.2 MySQL 全文検索の微調整
残念ながら、全文検索にはユーザーが調整できるパラメーターがまだほとんどありませんが、いくつか追加すると TODO の上位にランクされます。 MySQL ソース ディストリビューションがある場合 (セクション 2.3 MySQL ソース ディストリビューションのインストールを参照)、全文検索をより詳細に制御できます。

全文検索は最良の検索結果が得られるように慎重に調整されていることに注意してください。デフォルトの動作を変更すると、ほとんどの場合、検索結果が悪化するだけです。何をしようとしているのか理解していない限り、MySQL ソース コードを変更しないでください。

インデックス付き単語の最小長は、MySQL 変数 ft_min_word_len で指定されます。セクション 4.5.6.4 変数の表示を参照してください。これを希望の値に変更し、FULLTEXT インデックスを再構築します。 (この変数は MySQL 4.0 以降でのみサポートされます)

ストップワード リストは、ft_stopword_file 変数で指定されたファイルから読み取ることができます。セクション 4.5.6.4 変数の表示を参照してください。ストップワード リストを変更した後、FULLTEXT インデックスを再構築します。 (この変数は MySQL 4.0.10 以降でのみサポートされます)

50% しきい値の選択は、選択した特定の測定モードによって決まります。これを無効にするには、`myisam/ftdefs.h' ファイル内の次の行を変更します:
#define GWS_IN_USE GWS_PROB

を次のように変更します:
#define GWS_IN_USE GWS_FREQ

その後、MySQL を再コンパイルします。この場合、インデックスを再構築する必要はありません。注: これを使用すると、MATCH() に十分な類似性の値を提供する MySQL の機能が大幅に低下します。このような公開ワードを本当に検索する必要がある場合は、代わりに、50% のしきい値を無視する IN BOOLEAN MODE 検索を使用することをお勧めします。

検索エンジンの管理者は、論理全文検索に使用される演算子を変更したい場合があります。これらは変数 ft_boolean_syntax によって定義されます。セクション 4.5.6.4 変数の表示を参照してください。ただし、この変数は読み取り専用であり、その値は `myisam/ft_static.c' に設定されます。
これらの変更では、FULLTEXT インデックスを再構築する必要があります。MyISAM テーブルの場合、インデックス ファイルを再構築する最も簡単な方法は次のとおりです。

REPAIR TABLE tbl_name QUICK;フルテキスト インデックスに対するすべての操作が高速化されます。
近接演算子
「常にインデックスを付ける単語」をサポートします。 「C++」、「AS/400」、「TCP/IP」など、ユーザーが単語として扱いたい任意の文字列を指定できます。
MERGE テーブルでの全文検索をサポートします
マルチバイトをサポートします文字のサポート
データの言語に従ってストップワード リストを作成
ステミング (もちろん、データの言語に依存します)
ユーザーが提供できる汎用の UDF プリパーサー
スキーマをより柔軟にします (特定の調整可能なパラメーターを FULLTEXT に追加することによって)テーブルの作成/変更)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/318357.html技術記事 Backtoman.ChinaUnix.net MySQLReferenceManual (バージョン 4.1.0 アルファ版) -------------------------------------- ----------------------------------------------- 6.8MySQL がいっぱいテキスト検索が 3.23.23 に到達しました...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

SQLデータベースの構築方法 SQLデータベースの構築方法 Apr 09, 2025 pm 04:24 PM

SQLデータベースの構築には、DBMSの選択が必要です。 DBMSのインストール。データベースの作成。テーブルの作成;データの挿入;データの取得。データの更新。データの削除。ユーザーの管理。データベースのバックアップ。

See all articles