有時候我們在開發的時候碰到的資料庫不是 mysql 而是 mssql 或者 mongodb 等等。那麼還能用 sphinx 。其實是可以的。 俺公司遇到個就是 要在 fb 系統下 的sphinx 去索引 win 伺服器下的mssql 。 我是這樣做的。廢話不多講了。給例子。。。。
核心單詞: xmlpipe2 (通殺所有語言和資料庫做sphinx 的問題)。 其實就是。你通過任何程式去 讀取資料庫資訊然後構造一定格式的xml 文件 讓 sphinx 去建索引。 就那麼簡單。
當時專案我用的是 python來實現。當然了 php 實現也很容易,為了預防返回的xml過大,所以php建議使用比較底層的xml直譯器 : xmlwriter 。
其實python 也有類似的庫。叫: loxun 。 是利用stringio 來實現的。。
php 的請看官方推薦的辦法:
python 的我就帖我寫的 例子 : python -> mssql - > xml -> sphinx 。
# coding=utf-8
from loxun import xmlwriter
from stringio import stringio
import pymssql
conn = pymssql.connect(host=r'myse2k', user='map', password='ci@com', database='cemp',as_dict=true,charset='utf8')
cur = conn.cursor()
out = stringio()
xml = xmlwriter(out)
xml.addnamespace("sphinx","")
#---docset
xml.starttag("sphinx:docset")
# --- schema
xml.starttag("sphinx:schema")
#--- field
xml.tag("sphinx:field",)
#--- /field
xml.endtag()
#--- /schema
#-#--- wenwen--document
cur.execute('select count(*) from mapobjectinfo')
tj = cur.fetchone()[0]
pnum = 1000
cutsqlnum = pnum
_p = 1
znum = 0
while true:
if (tj-znum)
cutsqlnum = tj-znum
znum = int(pnum * _p)
cur.execute('select * from (select top %d* from (select top %d id,name from mapobjectinfo order by id desc)t1 order by id)t2 order by id desc' % (cutsqlnum,znum))
#print 'select * from (select top %d* from (select top %d id,name from mapobjectinfo order by id desc)t1 order by id)t2 order by id desc\n' % (cutsqlnum,znum)
row = cur.fetchone_asdict()
while row:
if row['id'] == 0:
row = cur.fetchone_asdict()
continue
xml.starttag("sphinx:document",)
xml.starttag("content")
xml.text(row['name'])
xml.endtag()
xml.endtag()
row = cur.fetchone_asdict()
_p = _p + 1
if znum > tj:
break
#---#--- /wenwen /document
conn.close()
xml.endtag()
#--- /docset
xml.close()
print out.getvalue()
複製**
然後在看下 sphinx 這邊建索引配置(只是簡單的測試例子,如果要用在生產環境,還需要做增量和區段查詢等。。。。。 -_-!不過呢這個例子小站也可以用了~):
source testxml
index testxml
indexer
searchd
複製**
那麼有點同學問: 那 mongodb 和 sphinx 怎麼弄?
這回童鞋們應該明白了吧。。如果還不明白當我沒說過。。哈哈
WPF 的 資料來源屬性 和 資料來源
一 資料來源 資料物件 屬性 path 或 path的值 path vm.property或m.property 通常具有通知功能 特例除外 二 path不能孤立而存在,它一定具有所歸屬的資料來源,一定要找到path 確切的說 是它的值 所歸屬的資料來源,說明如下 資料來源 資料物件 1 指定控制項...
SpringBoot學習 資料來源(一)單資料來源
springboot2.1.9預設支援三種資料來源 connection pool com.zaxxer.hikari.hikaridatasource org.apache.tomcat.jdbc.pool.datasource org.apache.commons.dbcp2.basicdata...
LINQ To Objects 的資料來源
linq to objects的資料來源 文 黃忠成 在 linq to objects 的架構中,只要實作了 ienumerable 介面的物件,皆可做為 linq to objects 的資料來源,那具體有那些呢?見下表。型別 說明 ienumerable 系列 1 具型陣列,如 string ...