php mysql實現全文檢索

2021-06-22 06:01:08 字數 1998 閱讀 7177

參考原文:

php+mysql實現全文檢索

2013-02-18 10:47:40

分類: php

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欄位內容進行中文分詞處理

中文分詞的處理過程,可以參考簡易中文分詞系統在城市黃頁網中,我們採用了scws的php擴充套件模組方式來實現中文分詞。scws的php擴充套件模組安裝非常簡單,只需簡單編譯配置後即可使用。在具體的php**中,我們寫了如下的函式來實現分詞後將分詞結果用空格進行連線。

//中文分詞函式

function str_fc($str)

}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 )

這裡的$data_code就是編碼後的結果。把編碼結果根據user_id存入使用者資訊全文索

引表(members_index)

4. 在進行搜尋處理時,首先對使用者輸入的關鍵字進行同樣的分詞編碼處理,然後通過mysql的select的match  against語句進行全文快速檢索,根據檢索結的user_id即可呼叫使用者資訊表(members)中的原始資料進行顯示,而沒有必要進行一次解碼重組。

以上mysql utf8中文全文檢索方法.

PHP Sphinx MySQL實現全文檢索

sphinx 可以解決 站內搜尋的應用場景 用來生成索引資料,為後續的高效搜尋做鋪墊 sphinx 簡介 sphinx是乙個基於sql mysql sqlserver.的全文檢索引擎,它提供了比資料庫更加專業的搜尋功能,並且sphinx特別為一些指令碼語言設計了搜尋的api介面嗎,比如php rub...

django 實現全文檢索

全文檢索不同於特定欄位的模糊查詢,使用全文檢索的效率再高,並且能夠對於中文進行分詞處理。安裝包 pip install django haystack pip install whoosh pip install jieba修改settings檔案 haystack 全文檢索框架 全文檢索框架的配置...

django haystack實現全文檢索

haystack配置使用 前後端分離 索引檔案生成 替換成jieba分詞 索引檔案使用 1.haystack是django的開源搜尋框架,該框架支援solr,elasticsearch,whoosh,xapian 搜尋引擎,不用更 改 直接切換引擎,減少 量。2.搜尋引擎使用whoosh,這是乙個由...