首頁 後端開發 php教程 PHP+MYSQL实现全文检索及全文检索工具

PHP+MYSQL实现全文检索及全文检索工具

Jun 23, 2016 pm 01:57 PM
php+mysql 工具 檢索

使用分词类库,分词类库请参见:http://www.xunsearch.com/scws/

如何使用PHP实现全文检索功能?
很多人可能马上可以想出几种方案,比如:文件检索法、采用SQL的like语句等方法,但这些方法效率都相当的低。
这里介绍一种比较高效的PHP全文检索实现方法,这就是采用MYSQL的FULLTEXT字段类型。但是MYSQL的FULLTEXT字段对中文的支持不是很好,本文也一并介绍如何通过PHP+MYSQL实现中文全文检索功能。
首先需要用到一个PHP中文分词扩展模块??SCWS,关于这个模块的安装和使用大家可以到www.ftphp.com/scws去查找相关内容(如有问题请留言)。
然后再看看mysql的fulltext字段类型的相关信息:
MySQL3.23.23之后的版本开始支持全文索引和搜索。全文索引在 MySQL 中是一个 FULLTEXT 类型索引。
FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中,将是非常慢的。

MYSQL全文搜索通过 MATCH() 函数完成。
下面举一简单例子:
1、新建数据表:
CREATE TABLE fulltext_sample(copy TEXT,FULLTEXT(copy)) TYPE=MyISAM;
这里的copy就是一个fulltext类型的字段,如果建表的时候没有添加全文检索字段,也可以通过alert来添加,如:
ALTER TABLE fulltext_sample ADD FULLTEXT(copy)
2、插入数据:
INSERT INTO fulltext_sample VALUES
('It appears good from here'),
('The here and the past'),
('Why are we hear'),
('An all-out alert'),
('All you need is love'),
('A good alert');
3、数据检索:
SELECT * FROM fulltext_sample WHERE MATCH(copy) AGAINST('love');
上面就是mysql的全文检索功能,注意:在全文索引上进行搜索是不区分大小写的。

下面再看如何实现中文全文检索。
fulltext字段是以词语为单位,词语之间需要用空格隔开,而汉语的句子中各个词语之间并不会用空格隔开,因此我们需要对中文进行分词,这也就是为什么上面需要强词用到中文分词扩展模块。
但是尽管对中文进行分词,MYSQL还是不能通过MATCH来实现中文的全文检索,这需要通过一定的方法来进行转换,一个比较简单实用的方法是采用下面这个函数(当然还有更好的),它将中文进行了urlencode转换。
function q_encode($str)
{
$data = array_filter(explode(" ",$str));
$data = array_flip(array_flip($data));
foreach ($data as $ss) {
  if (strlen($ss)>1 )
   $data_code .= str_replace("%","",urlencode($ss)) . " ";
}
$data_code = trim($data_code);
return $data_code;
}
将转换过后的内容保存至事先定义好的fulltext字段。同样,在查询的时候也需要将查询的关键词进行同样方法的转换。

 

 

 

 

PHP+Mysql实现UTF8全文搜索的方法

 

本文讲解一下如何在海量的数据中能够快速的进行全文检索呢?MySQL提供了一个全文索引功能,也就是把字段设置上FULLTEXT索引属性,然后通过SELECT的MATCH AGAINST语句进行查找。

我们开发的一个纯英文站点TouchUs - The Global Yellow Pages & Business Directory(www.touchus.org)就是利用MySQL的这一功能,实现了对十多万条数据的平均全文检索时间小于0.5秒。但是在开发TouchUs的中文网站??城市黄页网时(www.city39.cn),碰到了新的问题。原来英文排版时词和词之间是通过空格区分的,FULLText可以完全支持,但是对中文或者是东亚文字就没有这么简单了,因为中文的词和词之间并没有明显的分隔,所以MySQL不支持中文字符的全文检索。

如何让MySQL也能支持中文的全文检索呢?偶然间产生了一个思路,那就是能不能在中文分词后,通过对中文进行编码转化成英文字符,这样就在中英文间建立一个特定的联系,然后再进行全文检索,这样不就实现了中文的全文索引了吗?经过试验,答案是肯定的。下面是在城市黄页网中实现的具体过程:

1. 建立一个单独的索引表,比如对应members表,我们建立一个members_index表。

用户信息表(members)                    用户信息全文索引表(members_index)

User_id                                              user_id

User_name                                       index_intro

User_introduction                                   

在members_index表的index_intro中加入fulltext索引。

2. 对用户信息表(members)的User_introduction字段内容进行中文分词处理

中文分词的处理过程,可以参考简易中文分词系统http://www.ftphp.com/scws/,在城市黄页网中,我们采用了scws的PHP扩展模块方式来实现中文分词。scws的php扩展模块安装非常简单,只需简单编译配置后即可使用。在具体的php代码中,我们写了如下的函数来实现分词后将分词结果用空格进行连接。

//中文分词函数

function str_fc($str) {

$so = scws_new();

$so->set_charset('utf8');

// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件

$so->send_text($str);

while ($tmp = $so->get_result())

{

foreach (  $tmp as $ss ){

$s = trim($ss[word]);

if ( $s )

$mystr .= trim($ss[word]) . " ";

//echo urlencode(trim($ss[word])) . " ";

}

}

return $mystr;

}

该函数返回就是用空格连接的分词结果。

3. 对分词结果进行编码,可以采用多种编码方式,比如base64编码、urlencode编码、汉字转拼音等,对gb2312甚至可以采用区位码编码方式。考虑到存储空间以及便利性,我们采用了PHP的urlencode编码方式。需要注意的是,在编码前,我们可以去掉重复的分词来节约存储空间,编码后要去掉编码结果中的%符号,因为urlencode采用RFC 1738???行编码,会产生很多%,而%在MySQL是通配符。下面是编码过程用到的PHP代码

$data = str_fc($data);  //中文分词

$data = array_filter(explode(" ",$data)); //删除数组空项

$data = array_flip(array_flip($data));  //删除重复项

//对分词结果进行urlcode编码

foreach (  $data as $ss ) {

if (strlen($ss)>1 )

$data_code .= str_replace("%","",urlencode($ss)) . " ";

}

这里的$data_code就是编码后的结果。把编码结果根据user_id存入用户信息全文索

引表(members_index)

4. 在进行搜索处理时,首先对用户输入的关键字进行同样的分词编码处理,然后通过MySQL的SELECT的MATCH  AGAINST语句进行全文快速检索,根据检索结的user_id即可调用用户信息表(members)中的原始数据进行显示,而没有必要进行一次解码重组。

以上MySQL UTF8中文全文检索方法.


全文检索工具:http://www.xunsearch.com


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
數字貨幣app是啥軟件?全球數字貨幣十大app盤點 數字貨幣app是啥軟件?全球數字貨幣十大app盤點 Apr 30, 2025 pm 07:06 PM

隨著數字貨幣的普及和發展,越來越多的人開始關注和使用數字貨幣app。這些應用程序為用戶提供了便捷的管理和交易數字資產的方式。那麼,數字貨幣app到底是什麼軟件呢?讓我們深入了解,並盤點全球十大數字貨幣app。

量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 Apr 30, 2025 pm 07:24 PM

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

數字貨幣app是正規的嗎?全球正規合法虛擬幣交易app前十 數字貨幣app是正規的嗎?全球正規合法虛擬幣交易app前十 Apr 30, 2025 pm 07:09 PM

推薦的加密貨幣交易平台包括:1. Binance:全球最大交易量,支持1400 幣種,FCA、MAS認證。 2. OKX:技術實力強,支持400 幣種,香港證監會批准。 3. Coinbase:美國最大合規平台,適合新手,SEC和FinCEN監管。 4. Kraken:歐洲老牌,ISO 27001認證,持美國MSB及英國FCA牌照。 5. Gate.io:幣種最全(800 ),低交易費,獲多國牌照。 6. Huobi Global:老牌平台,提供多種服務,持日本FSA及香港TCSP牌照。 7. KuCoin

火幣之前的火信和OKX現在的pay有什麼核心區別? 火幣之前的火信和OKX現在的pay有什麼核心區別? Apr 30, 2025 pm 06:33 PM

火信和OKX Pay都不直接支持法幣支付。火信主要用於數字資產管理和交易,用戶需通過火幣交易所兌換法幣;OKX Pay專注於數字資產支付和轉賬,用戶需通過OKX平台兌換法幣。

2025年十大正規虛擬幣交易所app排名(數字貨幣交易平台app榜單) 2025年十大正規虛擬幣交易所app排名(數字貨幣交易平台app榜單) Apr 30, 2025 pm 05:39 PM

2025年十大正規虛擬幣交易所app排名:1. OKX,2. Binance,3. 火幣,4. Coinbase,5. Kraken,6. Bitfinex,7. KuCoin,8. Gemini,9. Bitstamp,10. Poloniex,各自在安全性、用戶體驗、交易手續費、流動性、幣種豐富度、專業工具、合規性、隱私保護、槓桿交易、國際化程度、客戶服務等方面表現突出。

數字貨幣app有前途嗎 蘋果手機數字貨幣交易平台app下載TOP10 數字貨幣app有前途嗎 蘋果手機數字貨幣交易平台app下載TOP10 Apr 30, 2025 pm 07:00 PM

數字貨幣App的前景廣闊,具體體現在:1. 技術創新驅動功能升級,通過DeFi與NFT融合及AI與大數據應用提升用戶體驗;2. 監管合規化趨勢,全球框架完善及AML、KYC要求趨嚴;3. 功能多元化與服務拓展,整合借貸、理財等服務並優化用戶體驗;4. 用戶基數與全球化擴張,預計2025年用戶規模突破10億。

香港數字貨幣交易所app如何下載 十大數字貨幣交易所APP盤點 香港數字貨幣交易所app如何下載 十大數字貨幣交易所APP盤點 Apr 30, 2025 pm 07:12 PM

下載香港數字貨幣交易所APP的方法包括:1. 選擇合規平台,如OSL、HashKey或Binance HK等;2. 通過官方渠道下載,iOS用戶在App Store下載,Android用戶通過Google Play或官網下載;3. 註冊並驗證身份,使用香港手機號或郵箱,上傳身份和地址證明;4. 設置安全措施,啟用雙重身份驗證並定期檢查賬戶活動。

幣圈中的三巨頭是哪些?虛擬幣主流交易所APP前十名推薦 幣圈中的三巨頭是哪些?虛擬幣主流交易所APP前十名推薦 Apr 30, 2025 pm 06:27 PM

在幣圈中,所謂的三巨頭通常指的是三種最具影響力和廣泛使用的加密貨幣。這些加密貨幣在市場上佔據了重要的地位,並在交易量和市值方面都表現出色。同時,虛擬幣主流交易所APP也是投資者和交易者進行加密貨幣交易的重要工具。本文將詳細介紹幣圈中的三巨頭以及推薦前十名的虛擬幣主流交易所APP。

See all articles