mysql全文索引_MySQL

Jun 01, 2016 pm 01:34 PM
mysql どうやって テクノロジー 百度

bitsCN.com

前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24。

Q:全文索引适用于什么场合?

A:全文索引是目前实现大数据搜索的关键技术。

至于更详细的介绍请自行百度,本文不再阐述。


一、如何设置?

如图点击结尾处的{全文搜索}即可设置全文索引,不同MYSQL版本名字可能不同。

 

二、设置条件

1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引(新版本MYSQL5.6的InnoDB支持全文索引)

2.字段类型:char、varchar和text

 

三、配置

my.ini配置文件中添加

# MySQL全文索引查询关键词最小长度限制

[mysqld]
ft_min_word_len = 1

保存后重启MYSQL,执行SQL语句

SHOW VARIABLES
ログイン後にコピー

查看ft_min_word_len是否设置成功,如果没设置成功请确保

1.确认my.ini正确配置,注意不要搞错my.ini的位置

2.确认mysql已经重启,实在不行重启电脑

其他相关配置请自行百度。

注:重新设置配置后,已经设置的索引需要重新设置生成索引

 

四、SQL语法

首先生成temp表

CREATE TABLE IF NOT EXISTS `temp` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `char` char(50) NOT NULL,  `varchar` varchar(50) NOT NULL,  `text` text NOT NULL,  PRIMARY KEY (`id`),  FULLTEXT KEY `char` (`char`),  FULLTEXT KEY `varchar` (`varchar`),  FULLTEXT KEY `text` (`text`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;INSERT INTO `temp` (`id`, `char`, `varchar`, `text`) VALUES(1, 'a bc 我 知道 1 23', 'a bc 我 知道 1 23', 'a bc 我 知道 1 23');
ログイン後にコピー

搜索`char`字段 'a' 值

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a')
ログイン後にコピー

但是你会发现查询无结果?!

这时你也许会想:哎呀怎么回事,我明明按照步骤来做的啊,是不是那里漏了或者错了?

你不要着急,做程序是这样的,出错总是有的,静下心来,着急是不能解决问题的。

 

如果一个关键词在50%的数据出现,那么这个词会被当做无效词。

如果你想去除50%的现在请使用IN BOOLEAN MODE搜索

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a' IN BOOLEAN MODE)
ログイン後にコピー

这样就可以查询出结果了,但是我们不推荐使用。

全文索引的搜索模式的介绍自行百度。

 

我们先加入几条无用数据已解除50%限制

INSERT INTO  `temp` (`id` ,`char` ,`varchar` ,`text`)VALUES (NULL ,  '7',  '7',  '7'), (NULL ,  '7',  '7',  '7'), (NULL ,  'a,bc,我,知道,1,23',  'a,bc,我,知道,1,23',  'a,bc,我,知道,1,23'), (NULL ,  'x',  'x',  'x');
ログイン後にコピー

这时你执行以下SQL语句都可以查询到数据

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('bc');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('我');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('知道');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('1');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('23');
ログイン後にコピー

以下SQL搜索不到数据

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('b');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('c');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('知');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('道');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('2');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('3');
ログイン後にコピー

 

如果搜索多个词,请用空格或者逗号隔开

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a x');SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a,x');
ログイン後にコピー

 

上面的SQL都可以查询到三条数据

 

五、分词

看到这里你应该发现我们字段里的值也是分词,不能直接插入原始数据。

全文索引应用流程:

1.接收数据-数据分词-入库

2.接收数据-数据分词-查询

现在有个重要的问题:怎么对数据分词?

数据分词一般我们会使用一些成熟免费的分词系统,当然如果你有能力也可以自己做分词系统,这里我们推荐使用SCWS分词插件。

 

首先下载

1.php_scws.dll  注意对于版本

2.XDB词典文件

3.规则集文件

下载地址

 

安装scws

1.先建一个文件夹,位置不限,但是最好不要中文路径。

2.解压{规则集文件},把xdb、三个INI文件全部扔到 D:/scws

3.把php_scws.dll复制到你的PHP目录下的EXT文件夹里面

4.在 php.ini 的末尾加入以下几行:

[scws]
;
; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,
; 再把 php_scws.dll 指定为绝对路径。
;
extension = php_scws.dll
scws.default.charset = utf8
scws.default.fpath = "D:/scws"

5.重启你的服务器

 

测试

$str="测试中文分词";$so = scws_new();$so->send_text($str);$temp=$so->get_result();$so->close();var_dump($temp);
ログイン後にコピー

 

如果安装未成功,请参照官方说明文档

 

这样我们就可以使用全文索引技术了。

bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

MySQLの外国キーの目的を説明してください。 MySQLの外国キーの目的を説明してください。 Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

上位10の仮想通貨取引プラットフォームの概要 上位10の仮想通貨取引プラットフォームの概要 Apr 21, 2025 am 09:33 AM

この記事では、上位10の仮想通貨取引プラットフォームアプリの情報を要約し、公式チャネルを介してプラットフォームへの安全なアクセスの重要性を強調し、検証方法を提供します。同時に、この記事は、アプリを選択する際のセキュリティ、取引手数料、通貨選択などの要因を考慮し、仮想通貨取引のリスクに注意を払うことを投資家に思い出させます。

mysqlとmariadbを比較対照します。 mysqlとmariadbを比較対照します。 Apr 26, 2025 am 12:08 AM

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。

See all articles