Summary: このチュートリアルでは、MySQL ブール式フルテキスト検索を実行する方法を学習します。 さらに、ブール演算子を使用して非常に複雑な検索クエリを形成する方法を学びます。
MySQL ブール式フルテキスト検索入門
自然言語フルテキスト検索に加えて、MySQL はブール式フルテキスト検索と呼ばれる追加のフォームをサポートしています。 ブールモードでは、MySQL は自然言語検索のような概念の代わりに単語を検索します。
MySQL では、ブール演算子とともに、ブールモードで非常に複雑なクエリに基づいたフルテキスト検索を実行することができます。 このため、Boolean モードでのフルテキスト検索は経験豊富なユーザーに適しています。
Boolean モードでフルテキスト検索を実行するには、AGAINST
式で IN BOOLEAN MODE
修飾子を使用します。 次の例は、製品名に Truck
という単語が含まれる製品を検索する方法を示しています。
Code language: SQL (Structured Query Language) (sql)
The product name has contain the Truck
word is returned.
商品名にTruck
という単語を含み、Pickup
を含む行を含まない商品を見つけるには、以下のクエリのようにPickup
キーワードを除いた結果を返すexcludeブール演算子(-
)を使用することができます。
Code language: SQL (Structured Query Language) (sql)
MySQL Boolean full-text search operators
以下の表にフルテキスト検索ブール演算子およびその意味を示す。
Operator | Description |
---|---|
+ | Include, the word must be present. |
– | Exclude, the word must not be present. |
> | |
< | |
() | 単語を部分式にグループ化します(グループとして包含、除外、ランキングなどを許可) |
~ | 単語のランキング値を否定することがあります。 |
* | ワード末尾にワイルドカードを使用します。 |
“” | フレーズを定義します(個々の単語のリストではなく、フレーズ全体が含めるか除外するかのマッチングに使用します)。 |
次の例は、検索クエリでのブール型フルテキスト演算子の使用方法を示しています。
2 つの単語の少なくとも一方を含む行を検索するには: mysql or tutorial
‘mysql tutorial’
両方の単語を含む行を検索するには、’sql or tutorial’ ‘sql”sql”sql’を含む行。 mysql and tutorial
‘+mysql +tutorial’
「mysql」を含む行を検索するが、「tutorial」を含む行を上位に表示する場合。
‘+mysql tutorial’
「mysql」を含むが「tutorial」を含まない行を検索するには
‘+mysql -tutorial’
「mysql」を含む行を検索して、「tutorial」を含む行は低くランク付けする場合。
‘+mysql ~tutorial’
“mysql” と “tutorial”, または “mysql” と “training” を任意の順序で含む行を検索し、”mysql tutorial” を含む行を “mysql training” より上に配置すること。
‘+mysql +(>tutorial <training)’
“mysql” や “mydatabase” などの “my” から始まる単語を含む行を見つけるには、以下のようにします。
‘my*’
MySQL ブール式フルテキスト検索の主な特徴
- MySQL はブール式フルテキスト検索において、自動的に降順で関連性により行をソートしません。
- ブール式クエリを実行するには、InnoDB テーブルでは
MATCH
式中のすべての列でFULLTEXT
指数が必要となります。 MyISAM テーブルでは、検索はかなり遅くなりますが、これは必要ありません。 - MySQL は、InnoDB テーブルの検索クエリで複数のブール演算子、たとえば ‘++mysql’ をサポートしていません。 これを実行すると、MySQL はエラーを返します。 しかし、MyISAM は異なる動作をします。 例えば、’+-mysql’ は ‘-mysql’ になります。
- InnoDB フルテキスト検索は、末尾のプラス (+) またはマイナス (-) 記号をサポートしません。 先行するプラスまたはマイナス記号のみをサポートします。 検索ワードが ‘mysql+’ または ‘mysql-‘ の場合、MySQL はエラーを報告します。 また、以下のようなワイルドカードを使ったプラスまたはマイナスは無効です。
- 50% しきい値とは、単語が行の 50% 以上に現れる場合、MySQL は検索結果でそれを無視することを意味します。
このチュートリアルでは、多くの便利なブール演算子を使用して MySQL ブール全文検索を実行する方法を学習していただきました。
このチュートリアルは役に立ちましたか。