ホームページ  >  記事  >  データベース  >  MySQL 全文インデックス アプリケーションに関する簡単なチュートリアル

MySQL 全文インデックス アプリケーションに関する簡単なチュートリアル

黄舟
黄舟オリジナル
2017-02-07 17:08:151250ブラウズ

この記事では、次の側面から MySQL フルテキスト インデックスの基本知識を紹介します:

  1. MySQL フルテキスト インデックスに関するいくつかの注意事項

  2. フルテキスト インデックスの構文

  3. いくつかの検索タイプの紹介

  4. いくつかの検索タイプの例

フルテキストインデックスに関するいくつかの注意事項


  • 検索はフルテキストタイプのインデックス列で行う必要があり、match で指定された列はフルテキストで指定されている必要があります

  • テーブルエンジンが MyIsam タイプのテーブルでのみ使用できます (MySQL 5.6 以降の Innodb テーブル エンジンでも使用できます)

  • char、varchar、text タイプの列にのみフルテキスト インデックスを作成できます

  • いいね 通常のインデックスと同様に、テーブルの定義時に指定することも、テーブルの作成後に追加または変更することもできます。大規模なレコードの挿入の場合、インデックスのないテーブルにデータを挿入した後にインデックスを作成する方がはるかに高速です。インデックスを使用してデータ テーブルにデータを挿入するよりも、挿入プロセスがはるかに高速です

  • 検索文字列はテーブルの列名ではなく、定数文字列である必要があります

  • 検索レコードの選択性が 50 を超える場合%、一致しないものとみなされます(自然検索のみ中制限)

  • 全文インデックス検索構文

  • MATCH (列名1,列名2,...) AGAINST(検索文字列[検索modifier])

match で指定された列名 1、2 など。これは、全文インデックスを作成する際に指定された列名です。 以下の検索修飾子について説明します。

search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}

いくつかの検索タイプの紹介

上記の検索修飾子は、実際には 3 つの全文検索タイプを示しています


自然言語モードの場合

はじめに: デフォルトの検索フォーム (検索修飾子なし、または修飾子が自然言語モードの場合) 特徴:


検索文字列の場合 文字は特別な意味を持たない通常の文字に解析されます

  1. マスクされた文字リスト内の文字列をフィルタリングします

  2. レコードの選択性が50%を超える場合、通常は考慮されます不一致である可能性があります

  3. 返されたレコードは、レコードの関連性に従って並べ替えられて表示されます

ブールモードで

概要: ブールモード検索 (検索修飾子がブール モード)


機能:

検索文字列内の特殊文字の意味が特定のルールに従って分析され、いくつかの論理ルールが実装されます。たとえば、特定の単語は出現する必要がある、または出現できないなどです。このタイプの検索で返されるレコードは、関連性に従って並べ替えられません。実際には 2 つの自然検索を実行する、少し複雑な検索フォームでは、直接レコードを返すレコードを返すことができます。導入関係。自然言語モードの修飾子 WITH QUERY EXPANSION または WITH QUERY EXPANSION 修飾子

    特徴: このタイプの検索は、実際には間接的な検索機能を提供します。たとえば、特定の単語を検索すると、最初の行が返されません。検索ワードに任意の文字列を含めます。最初の検索結果のレコード語に基づいて 2 回目の照合を実行できるため、間接的な関係を持つ一致するレコードを見つけることができます。
  1. いくつかの検索タイプの例

  2. 自然言語モード モードでのアプリケーション:
  3. これは、名前フィールドに全文インデックスを確立した製品テーブルに引き続き適用されます。これは、関連するキーワードに一致する必要があるためです。 name 列 次のように

  4. Sql ステートメントを記録します:
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)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:mysql8.0が来ます次の記事:mysql8.0が来ます