將 MSSQL 的資料用 Sphinx 來做全文檢索

發表時間: 2010-11-17 11:47:51
一劃 @ 61.56.133.15

Sphinx 是利用 unixodbc 去跟其他資料庫要資料的,所以要先確認是否已經有安裝 unixodbc。
安裝 unixodbc, unixodbc-dev
$ sudo apt-get install unixodbc unixodbc-dev


再來就是要和 MSSQL 溝通,這部分要用 FreeTDS,而 unixodbc 和 FreeTDS 的接法可參考
http://www.unixodbc.org/doc/FreeTDS.html


取得 FreeTDS 最新版本,ubuntu 有 FreeTDS 套件,但缺少了 libtdsodbc.so,所以就自己產出了。
wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
$ ./configure --with-tdsver=8.0 --with-unixodbc=/usr --prefix=/usr/local/freetds
$ make
$ sudo make install


該有的東西都有了後,就可以開始設定了
unixodbc 連接 mssql


編輯設定檔
$ sudo vi /etc/odbcinst.ini
[FreeTDS]
Description = v0.63 with protocol v8.0
Driver = /usr/local/freetds/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so


$ sudo vi /etc/odbc.ini
[MSSQL]
Driver = FreeTDS
Description = apdata database
Trace = No
Server = xxx.xxx.xxx.xxx
Port = 1433
Database = apdata


$ sudo odbcinst -i -d -f /etc/odbcinst.ini
$ sudo odbcinst -i -s -f /etc/odbc.ini























測試是否有成功連接。
$ isql -v MSSQL {USERNAME} {USERPASSWORD}
出現以下的畫面,就表示成功了
+---------------------------------------+
Connected!
sql-statement
help [tablename]
quit

+---------------------------------------+
SQL>


再接下來是設定 sphinx 的部分
編輯 sphinx.conf


$ sudo vi /usr/local/sphinx/etc/sphinx.conf
主要在 source 部分
source mssqlSrc
{
type = odbc
sql_host = XXX.XXX.XXX.XXX
sql_user = {YOURSQLUSERNAME}
sql_pass = {YOURPASSWORD}
sql_db = {DATABASENAME}
sql_port = 1433


   odbc_dsn = DSN=MSSQL;Driver={/etc/odbc.ini};Uid={NAME};Pwd={PASS}
sql_query = SELECT id, bla..bla..bla.. FROM {TABLE}

}
跟 mysql 設定沒有太大差別,主要就到 type 改成 odbc
odbc_dsn 要設定成你設的相關參數,以這個例子來說
DSN=MSSQL <= MSSQL 就是在 /etc/odbc.ini 裡設定的 [MSSQL]
Driver={/etc/odbc.ini} 就是你設定檔位置
Uid={NAME} 和 MSSQL 溝通時的身份名稱
Pwd={PASS} 和 MSSQL 溝通時用的身份的密碼


接下來就和以之前建立 sphinx index 的動作一樣囉。