sphinx->mysql非結構化數據又叫全文數據,非固定長度字段例如文章標題搜索這類適用sphinx全文數據搜索:順序掃描:如like查找索引掃描:把非結構化數據中的內容提取出來一部分重新組織,這部分數據就叫做索引全文檢索分為兩個過程1.創(chuàng)建索引2.搜索索引創(chuàng)建索引:sphinx通過語言處理組件會把搜索語句中的標點符號,語氣助詞給過濾掉,然后處理完畢后會分析出一些詞語,傳給索引組件,然后排序去除重復詞語.搜索索引:搜索關鍵字提交->sp" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Sphinx以及coreseek的安裝及使用 .No1

系統(tǒng) 1842 0

檢索結構
php -> sphinx -> mysql
非結構化數據又叫全文數據,非固定長度字段例如文章標題搜索這類適用sphinx

全文數據搜索:
順序掃描 : 如like查找
索引掃描 : 把非結構化數據中的內容提取出來一部分重新組織,這部分數據就叫做索引

全文檢索分為兩個過程
1.創(chuàng)建索引
2.搜索索引

創(chuàng)建索引:
sphinx通過語言處理組件會把搜索語句中的標點符號,語氣助詞給過濾掉,然后處理完畢后會
分析出一些詞語,傳給索引組件,然后排序去除重復詞語.

搜索索引:
搜索關鍵字 提交 -> sphinx 分析出文檔ID -> mysql通過ID查詢數據并返回


中文分詞需要coreseek
coreseek 支持中文的全文檢索引擎

sphinx的安裝
下載源碼包 進行源碼安裝
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install

sphinx 中重要的三個命令(bin目錄下)
Indexer 創(chuàng)建索引命令
Searchd 啟動進程命令
Search 命令行搜索命令

配置sphinx
cd /usr/local/sphinx/etc
cp sphinx.conf.dist sphinx.conf
vi sphinx.conf

配置文件
名為main的主數據源:source main{}
繼承名為main的增量數據源:source delta:main{}
名為main的主索引:index main{}
繼承名為main的增量索引:index delta:main{}
分布式索引:index dist1{}
索引器:indexer{}
服務進程:searchd{}

修改配置文件中主數據源的mysql配置,測試環(huán)境的數據源名為main,假設mysql中test有張表叫post
source main
{
# data source type. mandatory, no default value
# known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc
type = mysql

#####################################################################
## SQL settings (for 'mysql' and 'pgsql' types)
#####################################################################

# some straightforward parameters for SQL source types
sql_host = localhost
sql_user = root
sql_pass = admin
sql_db = test
sql_port = 3306 # optional, default is 3306


sql_sock = /tmp/mysqld.sock #如果是linux下需要開啟,指定sock文件

sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF #關閉緩存


# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
sql_query = \ #獲取數據的sql語句
SELECT id,title,content FROM post


#sql_attr_uint = group_id #對排序字段進行注釋


#sql_attr_timestamp = date_added #對排序字段進行注釋


sql_query_info = SELECT * FROM post WHERE id=$id


}
注釋掉所有增量數據源,修改主索引

index main
{
source = main

# index files path and file name, without extension
# mandatory, path must be writable, extensions will be auto-appended
path = /usr/local/sphinx/var/data/main

docinfo = extern
mlock = 0
morphology = none
# default is 1 (index everything)
min_word_len = 1

# charset encoding type
# optional, default is 'sbcs'
# known types are 'sbcs' (Single Byte CharSet) and 'utf-8'
charset_type = utf-8
# 'utf-8' default value is
# charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F

}

注釋掉所有的增量索引和分布式索引

?

配置完成后,創(chuàng)建索引
命令 indexer
-c 指定配置文件
--all 對所有索引重新編制索引
--rotate 用于輪換索引,主要是在不停止服務的時候,增加索引
--merge 合并索引
/usr/local/sphinx/sbin/indexer -c
/usr/local/sphinx/etc/sphinx --all
如果報錯./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解決方式:cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

測試
建立索引
[root@localhost bin]# ./indexer --all
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/etc/sphinx.conf'...
indexing index 'main'...
collected 2 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 2 docs, 47 bytes
total 0.033 sec, 1414 bytes/sec, 60.21 docs/sec
total 1 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 5 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

搜索
[root@localhost bin]# ./search linux1
Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/etc/sphinx.conf'...
index 'main': query 'linux1 ': returned 1 matches of 1 total in 0.000 sec

displaying matches:
1. document=1, weight=1
id=1
title=linux1
content=salflsdkjsdglds

words:
1. 'linux1': 1 documents, 1 hits

sphinx相當于把數據庫數據索引靜態(tài)化到本地 來加快查詢速度 避免消耗數據庫,給數據庫給降壓,當數據更新的時候,需要重新indexer --all 或者用 indexer main重建所有索引 才會搜出新的數據

?

安裝CORESEEK
coreseek里有2個文件夾 一個是mmseg中文分詞包 還有一個是csft(其實就是sphinx)包 都要安裝

首先安裝mmseg中文分詞
./configure --prefix=/usr/local/mmseg
編譯時可能會報錯config.status: error: cannot find input file: src/Makefile.in
通過automake來解決
首先檢查是否安裝了libtool如果沒有
yum -y install libtool
automake
如果automake報錯 原因可能是下列
Libtool library used but `LIBTOOL' is undefined
The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL'
to `configure.ac' and run `aclocal' and `autoconf' again.
If `AC_PROG_LIBTOOL' is in `configure.ac', make sure
its definition is in aclocal's search path.

原因分析
aclocal是個掃描程序, 負責掃描configure.ac中所有的宏定義并展開,
上面產生的原因就是找不到LIBTOOL宏的定義之處造成的.原因就是aclocal與libtool沒有安裝在一個相同目錄下面aclocal是去默認 安裝目錄 /usr/share/aclocal下面搜索所有的.m4文件找所定義的宏,但是由于安裝了多個aclocal,可能aclocal目錄不存在,實際目錄為/usr/share/aclocal1.10等,
這就造成了aclocal找不到m4文件的情況, 解決辦法就是將文件夾aclocal1.10重命名為aclocal.或者顯示指定路徑 aclocal -I /usr/share/aclocal1.10 -I /usr/share/libtool/m4 --install 或者把/usr/share/libtool/m4下面的文件都copy至/usr/share/aclocal1.10中.
本人的機器上是/usr/share/下有2個文件夾 一個是aclocal,一個是aclocal-1.11,首先將aclocal的所有文件拷貝到aclocal-1.11下
cp -R /user/share/aclocal/* /usr/share/aclocal-1.11/

然后重新運行aclocal和autoconf
aclocal && autoconf
最后再次運行automake
automake

然后繼續(xù)mmseg的安裝
./configure --prefix=/usr/local/mmseg
make && make install

如果make 報錯
There is an easy fix when you get such messages as "X--tag=CXX: command not found".
Just type:
export echo=echo
And try again.

所以輸入
export echo=echo
然后再次運行安裝
make && make install


安裝csft
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
安裝完畢后 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf
cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vim csft.conf

有些配置改動如下其他配置內容如上文的sphinx.conf
在索引源中注釋掉txt
index main{
#stopwords = G:\data\stopwords.txt
#wordforms =G:\data\wordforms.txt
#exceptions =/data/exceptions.txt
#charset_type = sbcs
#添加下面2行 意思是把中文分詞加入到配置文件中
char_type = zh_cn.utf-8
charset_dictpath =/usr/local/mmseg/etc/ #你安裝mmseg的目錄
}

保存配置
建立索引
cd /usr/local/coreseek/bin
./indexer --all
./search 中文詞綴


如何用php去使用sphinx
Sphinx集成到php程序中有兩種方式
1.Sphinx php 模塊(這次我們選擇使用的方式)
2.Sphinx api 類(位于coreseek源碼包里的csft里的api文件夾里有一個sphinxapi.php,使用的時候包含這個php文件即可)

我們要使用sphinx需要做以下幾件事:
1.首先要有數據
2.建立sphinx配置文件
3.生成索引
4,啟動searchd 服務進程,并開啟端口9312
5.用php客戶程序去鏈接sphinx服務


/usr/local/coreseek/bin/searchd
啟動進程命令 searchd
-c 指定配置文件
--stop 停止服務
--pidfile 顯示指定pid文件
-p 指定端口(默認9312)
注意:這里啟動的服務是searchd

使用php sphinx的模塊
下載 sphinx-1.1.0.tgz

tar zvxf sphinx-1.1.0.tgz
cd sphinx-1.1.0
/usr/local/php/bin/phpize #用于生成一個configure的腳本
進入coreseek源碼包的csft/api/libsphinxclent 目錄下執(zhí)行configure
./configure
make && make install
進入sphinx-1.1.0.gzt的源碼包目錄下 執(zhí)行configure用于生成so 的shpinx模塊
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-sphinx
make && make install
安裝成功后會有提示
Build complete.
Don't forget to run 'make test'.

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ (這個目錄是sphinx.so所在的目錄)

然后我們編輯php的ini文件 在extension中加入
extension=sphinx.so

然后重啟nginx和php的服務
最后打印一下phpinfo 查看sphinx是否開啟成功
如果成功開啟 就可以使用php手冊里的sphinx的方法和代碼了

Sphinx以及coreseek的安裝及使用 .No1


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠色丁香婷婷综合激情 | 欧美性猛交xxxx免费看久久久 | 麻豆精品国产免费观看 | 久久久久在线 | 久久精选 | 精品一区二区免费视频 | 欧美日韩高清在线观看一区二区 | 日韩中文字幕精品免费一区 | 视频在线观看91 | 欧美日韩久久毛片 | 久久天天躁夜夜躁2019 | 国产美女免费国产 | 国产成人香蕉在线视频fuz | 9999人体做爰大胆视频 | 亚洲美女视频免费 | 国产―笫一页―浮力影院xyz | 欧美在线综合 | 欧美色操 | 欧美精品18xxxhd4k | 国产成人精品综合久久久软件 | 亚洲人xxx日本人18 | 奇米在线免费视频 | 日本精品99 | 久久久久免费精品国产小说 | 欧美啊v在线观看 | 日韩 成人 | 亚洲精品中文字幕久久久久久 | 亚洲精品一区二区深夜福利 | 94久久国产乱子伦精品免费 | 欧美性在线播放 | 国产一级毛片视频在线! | 国产探花在线观看 | 天天干天天爱天天操 | 日本一级看片免费播放 | 久久爱伊人一区二区三区小说 | 一本色道久久综合亚洲精品高清 | 欧美午夜网站 | 黑人和黑人激情一级毛片 | 99精品视频看国产啪视频 | 久久精品国产精品亚洲20 | 无套嗨操|