sphinx 其他的資料來源

2021-06-01 08:32:34 字數 2463 閱讀 9335

有時候我們在開發的時候碰到的資料庫不是  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 ...