Sphinx 三种常见数据源配置

MySQL 数据源:

/usr/local/etc/sphinx.conf

#配置source
source blog
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = xxxx
sql_db = test
sql_port = 3306
sql_query = \
SELECT ID, post_author, UNIX_TIMESTAMP(post_date) as date_added, post_content from wp_posts
sql_attr_uint = post_author
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM wp_posts where ID=$id
}

#配置index:
index blog
{
source = blog
path = /usr/local/sphinx/var/data/blog
docinfo = extern
charset_type = zh_cn.utf-8
charset_dictpath = /usr/local/sphinx/dict
}
创建blog索引
indexer --config /usr/local/etc/sphinx.conf blog

XML数据源:

source blog
{
    type = xmlpipe2
    xmlpipe_command = cat /xxx/xxx.xml	#使用命令或程序打印xml内容即可被索引获取数据
    #xmlpipe_command = python print_xml.py	#Sphinx可以通过管道获取程序输出,从而数据源
}


index ActivationMessage
{

        source                  = blog
        path                    = /usr/local/sphinx/var/data/blog
        docinfo                 = extern
        mlock                   = 0
        preopen                 = 0
        morphology              = none
        dict                    = keywords
        charset_dictpath        = /usr/local/sphinx/dict
        charset_type            = zh_cn.utf-8
        html_strip              = 1
        wordforms               = /usr/local/mmseg3/etc/wordforms.txt
}

xml文件(类似下面格式):

<?xml version="1.0" encoding="utf-8"?>

<sphinx:docset>

<sphinx:schema>

<sphinx:field name="subject"/> 

<sphinx:field name="content"/>

<sphinx:attr name="published" type="timestamp"/>

<sphinx:attr name="author_id" type="int" bits="16" default="1"/>

</sphinx:schema>

<sphinx:document id="1234">

<content>this is the main content <![CDATA[[and this <cdata> entry must be handled properly by xml parser lib]]></content>

<published>1012325463</published>

<subject>note how field/attr tags can be in <b class="red">randomized</b> order</subject>

<misc>some undeclared element</misc>

</sphinx:document>

<!-- ... more documents here ... -->

</sphinx:docset>

Python数据源(万能数据源)

配置文件

# python路径定义
python
{
    path = /usr/local/coreseek/etc/pysource			#BSD、Linux环境下设置
    path = /usr/local/coreseek/etc/pysource/csft_demo	#BSD、Linux环境下设置
    #path = etc/pysource			#Windows环境下设置,最好给出绝对路径
    #path = etc/pysource/csft_demo	#Windows环境下设置,最好给出绝对路径
}

#源定义
source python
{
    type = python
    name = csft_demo.MainSource #python的第二个path下的__init__.py中的MainSource,Coreseek会自动调用该类下的NextDocument方法获取数据数据
}

#index定义
index python
{
	source			 = python             #对应的source名称
	path			 = var/data/python
	docinfo			 = extern
	mlock			 = 0
	morphology		 = none
	min_word_len	 = 1
	html_strip		 = 0
	charset_dictpath = /usr/local/mmseg3/etc/	#BSD、Linux环境下设置,/符号结尾
	charset_type	 = zh_cn.utf-8
}
python代码:

# -*- coding:utf-8 -*-
# coreseek3.2 python source演示
# author: HonestQiao
# date: 2010-06-03 11:46
#path=etc/pysource/csft_demo/__init__.py
class MainSource(object):
    def __init__(self, conf):
        self.conf =  conf
        self.idx = 0
        self.data = [
            {'id':1, 'subject':u"愚人节最佳蛊惑爆料 谷歌300亿美元收购百度", 'context':u'据国外媒体报道,谷歌将巨资收购百度,涉及金额高达300亿美元。谷歌借此重返大陆市场。  该报道称,目前谷歌与百度已经达成了收购协议,将择机对外公布。百度的管理层将100%保留,但会将项目缩减,包括有啊商城,以及目前实施不力的凤巢计划。正在进行测试阶段的视频网站qiyi.com将输入更多的Youtube资源。(YouTube在大陆区因内容审查暂不能访问)。  该消息似乎得到了谷歌CEO施密特的确认,在其twitter上用简短而暧昧的文字进行了表述:“ Withdraw from that market? u\'ll also see another result, just wait... ” 意思是:从那个市场退出?你还会看到另外一个结果。毫无疑问,那个市场指的就是中国大陆。而另外的结果,对应此媒体报道,就是收购百度,从而曲线返回大陆搜索市场。  在最近刚刚结束的深圳IT领袖峰会上,李彦宏曾言,“谷歌没有退出中国,因为还在香港”。也似乎在验证被收购的这一事实。  截止发稿,百度的股价为597美元,市值为207亿美元。谷歌以高达300亿美元的价格,实际溢价高达50%。而谷歌市值高达1796亿美元,而且手握大量现金,作这样的决策也在情理之中。    近日,很多媒体都在报道百度创始人、CEO李彦宏的两次拒购:一次是百度上市前夕,李彦宏拒绝谷歌的并购,这个细节在2月28日央视虎年首期对话节目中得到首次披露﹔一次是在百度国际化战略中,拒绝采用海外并购的方式,而是采取了从日本市场开始的海外自主发展之路。这也让笔者由此开始思考民族品牌的发展之路。   收购是打压中国品牌的惯用伎俩  2010年2月28日,央视经济频道《对话》节目昨晚推出虎年首期节目,百度董事长兼CEO李彦宏作为嘉宾做客节目。李彦宏首度谈及2005年百度上市前夕,谷歌CEO施密特曾秘密造访百度时秘密谈话的内容,主要是劝阻百度上市,李彦宏断然拒绝了施密特的“好意”。今天看来,施密特当日也许已有不祥的预感,这个几百人的小公司终有一日会成为他们的大麻烦。  本期《对话》一经播出,便引发了业界讨论。  外资品牌通过收购打压中国品牌的案例不胜枚举。从以往跨国企业并购的中国品牌来看,真正让其活下来的品牌并不多,要么被雪藏,要么被低端化。  因此,2005年百度没有接受Google的收购邀请,坚持自主发展,这对于保护中国品牌,维护中国网民信息安全有着至关重要的作用。当前百度市场份额高达76%,并持续增长,这也充分验证了李彦宏拒绝收购决策的正确性。  今天看来,“百度一下”已经成为3亿多中国网民的网络生存法则,而直到今天环视全球,真正能像中国一样,拥有自己独立搜索引擎的只有4个国家!我们也许应该庆幸当时李彦宏的选择。这个故事也告诉我们,中国企业做品牌还要靠自己!  收购也可能是中国企业走出去的陷阱  同样在2月28日,亚布力第十届年会上,李彦宏在论坛上指出:“我们和很多其它公司的国际化路子是很不一样的,我们不是去买一个国外的公司,”,李彦宏解释了百度率先选择日本作为走出去的对象的原因,因为日本和中国一衣带水的近邻优势,日本的市场规模,在日本也没有一家独大的搜索引擎。  中国企业收购这些外资品牌目的是“借船出海”。外资品牌进入中国是收购中国优质品牌,而中国企业进入国外市场的收购策略恰恰相反,这也是中国企业借船出海屡屡失败的原因所在。  笔者认为,中国互联网公司走出去要依靠自身发展,并不能单纯依靠收购。李彦宏在百度成立伊始就抱定了国际化决心,使百度真正在面对国际化机遇时,更加冷静和具有前瞻力。李彦宏也承认当前百度在日本还处于初级发展阶段,但他也预言“2012年,百度与Google划洋而治”,对此我们拭目以待!', 'published':1270131607, 'author_id':1},
            {'id':2, 'subject':u'Twitter主页改版 推普通用户消息增加趋势话题', 'context':u'4月1日消息,据国外媒体报道,Twitter本周二推出新版主页,目的很简单:帮助新用户了解Twitter和增加用户黏稠度。  新版Twittter入口处的内容眼花缭乱,在头部下方有滚动的热门趋势话题,左边列出了普通用户账户和他们最新的消息。  另一个显著的部分是“Top Tweets”,它采用了新算法推选出最热门的话题,每个几秒刷新一次。Twitter首席科学家Abdur Chowdhury表示,这种算法选出了所有用户的信息,而不是拥有大量追随者所发的信息。  首页对于首次访问网站的用户非常重要,因为这决定了用户的第一印象。研究发现,多达60%的Twittter用户在注册后的一个月内不再访问网站。Twittter希望能更好地展现网站的面貌,帮助游客找到感兴趣的东西', 'published':1270135548, 'author_id':1},
            {'id':3, 'subject':u'死都要上!Opera Mini 体验版抢先试用', 'context':u'Opera一直都被认为是浏览速度飞快,同时在移动平台上更是占有不少的份额。不久前,Opera正式向苹果提交了针对iPhone设计的Opera Mini。日前,台湾IT网站放出了Opera Mini和Safari的评测文章,下面让我们看看Opera和Safari到底谁更好用更快吧。  Opera Mini VS Safari,显示方式很不相同和Safari不同的是,Opera Mini会针对手机对网页进行一些调整  Opera Mini与Safari的运作原理不大相同。网页会通过Opera的服务器完整压缩后再发送到手机上,不像Safari可通过Multi-Touch和点击的方式自由缩放,Opera Mini会预先将文字照iPhone的宽度做好调整,点击区域后自动放大。如果习惯了Safari的浏览方式,会感觉不大顺手,不过对许多宽度太宽,缩放后文字仍然显示很小的网页来说,Opera Mini的显示方式比较有优势。  打开测试网站首页所花费的流量,Safari和Opera Mini的差距明显可见。这个在国内移动资费超高的局面来说,Opera Mini估计会比较受欢迎和省钱。Opera Mini的流量少得惊人,仅是Safari的十分之一  兼容性相比,Safari完胜打开Google首页,Safari上是iPhone专用界面,Opera则是一般移动版本  Opera Mini的速度和省流量还是无法取代Safari成为iPhone上的主要浏览器。毕竟iPhone的高占有率让许多网站,线上服务都为Safari设计了专用页面。光Google的首页为例子就看出了明显的差别。另外,像Google Buzz这样线上应用,就会出现显示错误。Google Buzz上,Opera无法输入内容  Opera Mini其他专属功能页面内搜索和关键字直接搜索相当人性化  除了Opera独创的Speed Dial九宫格快速启动页面外,和Opera Link和电脑上的Opera直接同步书签、Speed Dial设定外。Opera Mini还能够直接搜索页面中的文字,查找资料时相当方便。另外也能选取文字另开新分页搜索,比起Safari还要复制、开新页、粘贴简单许多。同时还能将整个页面打包存储,方便离线浏览。  现在Opera Mini想要打败Safari还剩下一个很严重的问题-苹果何时会或者会不会通过Opera Mini的审核。', 'published':1270094460, 'author_id':2},
        ]

    def GetScheme(self):  #获取结构,docid、文本、整数
        return [
            ('id' , {'docid':True, } ),
            ('subject', { 'type':'text'} ),
            ('context', { 'type':'text'} ),
            ('published', {'type':'integer'} ),
            ('author_id', {'type':'integer'} ),
        ]

    def GetFieldOrder(self): #字段的优先顺序
        return [('subject', 'context')]
        
    def Connected(self):   #如果是数据库,则在此处做数据库连接
        pass

    def NextDocument(self):   #取得每一个文档记录的调用
        if self.idx < len(self.data):
            item = self.data[self.idx]
            self.id = item['id'] #'docid':True
            self.subject = item['subject'].encode('utf-8')
            self.context = item['context'].encode('utf-8')
            self.published = item['published']
            self.author_id = item['author_id']
            self.idx += 1
            return True
        else:
            return False

if __name__ == "__main__":    #直接访问演示部分
    conf = {}
    source = MainSource(conf)
    source.Connected()

    while source.NextDocument():
        print "id=%d, subject=%s" % (source.id, source.subject)
    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值