この記事では、次の側面から MySQL フルテキスト インデックスの基本知識を紹介します:
MySQL フルテキスト インデックスに関するいくつかの注意事項
フルテキスト インデックスの構文
いくつかの検索タイプの紹介
いくつかの検索タイプの例
フルテキストインデックスに関するいくつかの注意事項
検索はフルテキストタイプのインデックス列で行う必要があり、match で指定された列はフルテキストで指定されている必要があります
テーブルエンジンが MyIsam タイプのテーブルでのみ使用できます (MySQL 5.6 以降の Innodb テーブル エンジンでも使用できます)
char、varchar、text タイプの列にのみフルテキスト インデックスを作成できます
いいね 通常のインデックスと同様に、テーブルの定義時に指定することも、テーブルの作成後に追加または変更することもできます。大規模なレコードの挿入の場合、インデックスのないテーブルにデータを挿入した後にインデックスを作成する方がはるかに高速です。インデックスを使用してデータ テーブルにデータを挿入するよりも、挿入プロセスがはるかに高速です
検索文字列はテーブルの列名ではなく、定数文字列である必要があります
検索レコードの選択性が 50 を超える場合%、一致しないものとみなされます(自然検索のみ中制限)
全文インデックス検索構文
match で指定された列名 1、2 など。これは、全文インデックスを作成する際に指定された列名です。 以下の検索修飾子について説明します。
search_modifier: { IN NATURAL LANGUAGE MODE | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION | IN BOOLEAN MODE | WITH QUERY EXPANSION }
いくつかの検索タイプの紹介
上記の検索修飾子は、実際には 3 つの全文検索タイプを示しています
はじめに: デフォルトの検索フォーム (検索修飾子なし、または修飾子が自然言語モードの場合) 特徴:
検索文字列の場合 文字は特別な意味を持たない通常の文字に解析されます
マスクされた文字リスト内の文字列をフィルタリングします
レコードの選択性が50%を超える場合、通常は考慮されます不一致である可能性があります
返されたレコードは、レコードの関連性に従って並べ替えられて表示されます
ブールモードで
概要: ブールモード検索 (検索修飾子がブール モード)
機能:
検索文字列内の特殊文字の意味が特定のルールに従って分析され、いくつかの論理ルールが実装されます。たとえば、特定の単語は出現する必要がある、または出現できないなどです。このタイプの検索で返されるレコードは、関連性に従って並べ替えられません。実際には 2 つの自然検索を実行する、少し複雑な検索フォームでは、直接レコードを返すレコードを返すことができます。導入関係。自然言語モードの修飾子 WITH QUERY EXPANSION または WITH QUERY EXPANSION 修飾子
いくつかの検索タイプの例
これは、名前フィールドに全文インデックスを確立した製品テーブルに引き続き適用されます。これは、関連するキーワードに一致する必要があるためです。 name 列 次のように
SELECT * FROM product WHERE match(name) against(‘auto’)
時間は悪くなく、約 870,000 レコード中 10,000 レコード以上がヒットしましたが、効果は依然として良好です
product から match(name) between('auto') を選択して、レコードの相関値を表示できます。値は の間にあります。 0 と 1。0 はレコードが一致しないことを意味します
いくつかの重要な機能: 1. どの単語が無視されるか デフォルトの全文インデックスでは 4 文字を超える単語が有効であると見なされます。構成内の ft_min_word_len を変更して、語彙リスト内のシールドされた単語のデフォルトの全文を構成できます。これらの単語はあまりにも一般的であり、意味論的な効果がないため、インデックスは一部の一般的な単語をブロックします。検索プロセス。もちろん、このリストは構成可能です。 2. 単語の分割を実行する方法 フルテキスト インデックスは、連続する有効な文字 (正規表現の w と一致する文字セット) を単語とみなし、「'」を含めることもできますが、2 つの単語は含まれません。連続した「」は 1 つの区切り文字とみなされます。その他の区切り文字: スペース、カンマ、ピリオドなど。 ブール モード アプリケーション: ブール マッチング モードでは、いくつかの特殊記号を追加し、いくつかの検索プロセス論理関数を追加できます。公式 Web サイトで提供されている例など (mysql 文字列を含み、Yousql を含まないステートメントを検索します):SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN MODE);
可见,我们对搜索的控制又多了一些,看起来“高大上”了些。
实际上,上面的操作隐含了几个意思:
加号:相当于and
减号:相当于not
没有:相当于or
下面看下布尔类型搜索的几个重要特性:
1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果
2. 不会自动的按记录的相关性进行降序排序
3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。
4. 支持最小、最大单词长度
5. 应用屏蔽词列表
布尔搜索支持的操作符:
n 加号 +:指示修饰的单词必须出现在记录中
n 减号 -:指示修饰的单词必须不能出现在记录中
n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高
n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词
下面是官方的一些实例:
至少包含一个词的记录 ‘apple banana’ 必须包含着两个词 ‘+apple +juice’ 必须包含apple,包含macintosh的记录相关性高,也可以不包含 ‘+apple macintosh’ 必须包含apple且不能喊有macintosh ‘+apple -macintosh’ 查找apple开头单词的记录 ‘apple*’ 完整匹配some words单词 ‘”some words”‘
了解了基本的mysql全文索引知识,觉得它的全文索引比like当然是强了很多。但是面对高级的搜索还是略显简陋,且性能问题也是担忧。
以上就是MySQL 全文索引应用简明教程的内容,更多相关内容请关注PHP中文网(www.php.cn)!