mysql coreseek_关于mysql中文全文检索Sphinx之coreseek
在使用mysql數據庫過程中,如果想實現全文檢索的優化,可以使用mysql自帶全文索引,但是不支持中文。。關于sphinx的安裝網上很多教程寫的都不錯比如:http://www.coreseek.cn/products-install/。這里就不再說明安裝方法了。有興趣的可以自己參考。
MySQL在高并發連接、數據庫記錄數較多的情況下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不僅效率差,而且以通配符%和_開頭作查詢時,使用不到索引,需要全表掃描,對數據庫的壓力也很大。MySQL針對這一問題提供了一種全文索引解決方案,這不僅僅提高了性能和效率(因為MySQL對這些字段做了索引來優化搜索),而且實現了更高質量的搜索。但是,至今為止,MySQL對中文全文索引無法正確支持。
可以使用Sphinx(一種全文檢索引擎)技術,Sphinx默認不支持中文索引及檢索。以前用Coreseek的補丁來解決,目前Coreseek 不單獨提供補丁文件,而基于sphinx開發了Coreseek 全文檢索服務器,Coreseek應該是現在用的最多的sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg包含mmseg中文分詞。
Sphinx的基本原理與檢索流程
這種檢索流程使用sphinx官方為我們提供的API文件(php使用sphinxapi.php),首先php通過這個api連接sphinx服務器,獲取查詢結果的id信息,然后再通過這些id從mysql數據庫中 取得相關的數據。
SphinxSE — 基于Sphinx存儲引擎檢索
這種檢索流程,把sphinx編譯成mysql的存儲引擎,SphinxSE是一個可以編譯進MySQL 5.x版本的MySQL存儲引擎,它利用了該版本MySQL的插件式體系結構。盡管被稱作“存儲引擎”,SphinxSE自身其實并不存儲任何數據。它其實是一個允許MySQL服務器與searchd交互并獲取搜索結果的嵌入式客戶端。所有的索引和搜索都發生在MySQL之外。
SphinxSE的使用:
當需要在MySQL端對Sphinx結果集做額外處理(例如對原始文檔表做JOIN,MySQL端的額外過濾等等)時提供優化。
要通過SphinxSE搜索,需要建立特殊的ENGINE=SPHINX的“搜索表”,然后使用SELECT語句從中檢索,把全文查詢放在WHERE子句中。
創建一張表t1
CREATE TABLE t1
(
id INTEGER UNSIGNED NOT NULL,
weight INTEGER NOT NULL,
query VARCHAR(3072) NOT NULL,
group_id INTEGER,
INDEX(query)
) ENGINE=SPHINX CONNECTION=”sphinx://localhost:9312/test1″;
搜索表前三列的類型必須是INTEGER,INTEGER和VARCHAR,這三列分別對應文檔ID,匹配權值和搜索查詢。查詢列必須被索引,其他列必須無索引。列的名字會被忽略,所以可以任意命名,參數CONNECTION來指定用這個表搜索時的默認搜索主機、端口號和索引,語法格式:CONNECTION=”sphinx://HOST:PORT/INDEXNAME”。
執行SQL語句 select d.id,d.title,d.content from t1 join documents as d on t1.id = d.id and t1.query = ‘研究生創業’;
+—-+——————–+———————–+
| id | title | content |
+—-+——————–+———————–+
| 5 | 研究生的故事 | 研究生自主創業 |
+—-+——————–+———————–+
1 row in set (0.04 sec)
結果返回了我們想要的數據,可見利用SphinxSE可以僅僅在SQL語句上做很小的改動即可很方便的實現全文檢索!
主索引 + 增量索引
前提:數據不會被改變
第一步:建表: (用來存索引過的最大的記錄 id)
Create table a(
Id int unsigned not null primary key,
Max_id int unsigned,
);
第二步:修改配置文件為:見 sphinx配置文件
第三步:先執行 ./bin/indexer –c ./etc/sphinx.conf –test1
生成所有的索引-〉一個數據源的主查詢,只有第一次執行
第四步:定期執行:
./bin/indexer –c ./etc/sphinx.conf delta –rotate
生成增量的索引文件
第五步:合并到主索引中
./bin/indexer –merge test1 delta –c ./etc/sphinx.conf –rotate
總結
以上是生活随笔為你收集整理的mysql coreseek_关于mysql中文全文检索Sphinx之coreseek的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis 算术逻辑运算
- 下一篇: Mysql数据库正则表达式