日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql coreseek_关于mysql中文全文检索Sphinx之coreseek

發(fā)布時(shí)間:2023/12/10 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql coreseek_关于mysql中文全文检索Sphinx之coreseek 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用mysql數(shù)據(jù)庫過程中,如果想實(shí)現(xiàn)全文檢索的優(yōu)化,可以使用mysql自帶全文索引,但是不支持中文。。關(guān)于sphinx的安裝網(wǎng)上很多教程寫的都不錯(cuò)比如:http://www.coreseek.cn/products-install/。這里就不再說明安裝方法了。有興趣的可以自己參考。

MySQL在高并發(fā)連接、數(shù)據(jù)庫記錄數(shù)較多的情況下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不僅效率差,而且以通配符%和_開頭作查詢時(shí),使用不到索引,需要全表掃描,對數(shù)據(jù)庫的壓力也很大。MySQL針對這一問題提供了一種全文索引解決方案,這不僅僅提高了性能和效率(因?yàn)镸ySQL對這些字段做了索引來優(yōu)化搜索),而且實(shí)現(xiàn)了更高質(zhì)量的搜索。但是,至今為止,MySQL對中文全文索引無法正確支持。

可以使用Sphinx(一種全文檢索引擎)技術(shù),Sphinx默認(rèn)不支持中文索引及檢索。以前用Coreseek的補(bǔ)丁來解決,目前Coreseek 不單獨(dú)提供補(bǔ)丁文件,而基于sphinx開發(fā)了Coreseek 全文檢索服務(wù)器,Coreseek應(yīng)該是現(xiàn)在用的最多的sphinx中文全文檢索,它提供了為Sphinx設(shè)計(jì)的中文分詞包LibMMSeg包含mmseg中文分詞。

Sphinx的基本原理與檢索流程

這種檢索流程使用sphinx官方為我們提供的API文件(php使用sphinxapi.php),首先php通過這個(gè)api連接sphinx服務(wù)器,獲取查詢結(jié)果的id信息,然后再通過這些id從mysql數(shù)據(jù)庫中 取得相關(guān)的數(shù)據(jù)。

SphinxSE — 基于Sphinx存儲(chǔ)引擎檢索

這種檢索流程,把sphinx編譯成mysql的存儲(chǔ)引擎,SphinxSE是一個(gè)可以編譯進(jìn)MySQL 5.x版本的MySQL存儲(chǔ)引擎,它利用了該版本MySQL的插件式體系結(jié)構(gòu)。盡管被稱作“存儲(chǔ)引擎”,SphinxSE自身其實(shí)并不存儲(chǔ)任何數(shù)據(jù)。它其實(shí)是一個(gè)允許MySQL服務(wù)器與searchd交互并獲取搜索結(jié)果的嵌入式客戶端。所有的索引和搜索都發(fā)生在MySQL之外。

SphinxSE的使用:

當(dāng)需要在MySQL端對Sphinx結(jié)果集做額外處理(例如對原始文檔表做JOIN,MySQL端的額外過濾等等)時(shí)提供優(yōu)化。

要通過SphinxSE搜索,需要建立特殊的ENGINE=SPHINX的“搜索表”,然后使用SELECT語句從中檢索,把全文查詢放在WHERE子句中。

創(chuàng)建一張表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,這三列分別對應(yīng)文檔ID,匹配權(quán)值和搜索查詢。查詢列必須被索引,其他列必須無索引。列的名字會(huì)被忽略,所以可以任意命名,參數(shù)CONNECTION來指定用這個(gè)表搜索時(shí)的默認(rèn)搜索主機(jī)、端口號和索引,語法格式:CONNECTION=”sphinx://HOST:PORT/INDEXNAME”。

執(zhí)行SQL語句 select d.id,d.title,d.content from t1 join documents as d on t1.id = d.id and t1.query = ‘研究生創(chuàng)業(yè)’;

+—-+——————–+———————–+

| id | title | content |

+—-+——————–+———————–+

| 5 | 研究生的故事 | 研究生自主創(chuàng)業(yè) |

+—-+——————–+———————–+

1 row in set (0.04 sec)

結(jié)果返回了我們想要的數(shù)據(jù),可見利用SphinxSE可以僅僅在SQL語句上做很小的改動(dòng)即可很方便的實(shí)現(xiàn)全文檢索!

主索引 + 增量索引

前提:數(shù)據(jù)不會(huì)被改變

第一步:建表: (用來存索引過的最大的記錄 id)

Create table a(

Id int unsigned not null primary key,

Max_id int unsigned,

);

第二步:修改配置文件為:見 sphinx配置文件

第三步:先執(zhí)行 ./bin/indexer –c ./etc/sphinx.conf –test1

生成所有的索引-〉一個(gè)數(shù)據(jù)源的主查詢,只有第一次執(zhí)行

第四步:定期執(zhí)行:

./bin/indexer –c ./etc/sphinx.conf delta –rotate

生成增量的索引文件

第五步:合并到主索引中

./bin/indexer –merge test1 delta –c ./etc/sphinx.conf –rotate

總結(jié)

以上是生活随笔為你收集整理的mysql coreseek_关于mysql中文全文检索Sphinx之coreseek的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。