sphinx xmlpipe2数据源配置

原创 2016年05月31日 14:21:23

首先是一个工具类SphinxXMLFeed用于将数据写入xml:

此处是采用了hash 算法将数据写入10个xml,你可以根据自己需求改动,如果数据量不大只写入一个也行,只需写死文件名。

class SphinxXMLFeed extends XMLWriter
{
private $fields = array();
private $attributes = array();
public static $dir = “/var/log/”;
public function __construct($options = array())
{
$defaults = array(
‘indent’ => false,
);
$options = array_merge($defaults, $options);

// Store the xml tree in memory
$this->openMemory();

if($options[‘indent’]) {
$this->setIndent(true);
}
}

public function setFields($fields) {
$this->fields = $fields;
}

public function setAttributes($attributes) {
$this->attributes = $attributes;
}

public function addDocument($doc,$uid) {
$this->startElement(‘sphinx:document’);
$this->writeAttribute(‘id’, $doc[‘id’]);

foreach($doc as $key => $value) {
// Skip the id key since that is an element attribute
if($key == ‘id’) continue;

$this->startElement($key);
$this->text($value);
$this->endElement();
}

$this->endElement();
$this->save($this->outputMemory(),$uid);
}

public function beginOutput($uid) {

$this->startDocument(‘1.0′, ‘UTF-8′);
$this->startElement(‘sphinx:docset’);
$this->startElement(‘sphinx:schema’);

// add fields to the schema
foreach($this->fields as $field) {
$this->startElement(‘sphinx:field’);
$this->writeAttribute(‘name’, $field);
$this->endElement();
}

// add attributes to the schema
foreach($this->attributes as $attributes) {
$this->startElement(‘sphinx:attr’);
foreach($attributes as $key => $value) {
$this->writeAttribute($key, $value);
}
$this->endElement();
}

// end sphinx:schema
$this->endElement();
$this->save_first($this->outputMemory(),$uid);
}

public function endOutput($uid)
{
// end sphinx:docset
$this->endElement();
$this->save($this->outputMemory(),$uid);
}

public function save($data,$uid){
chmod(dirname(__FILE__), 0777); // 以最高操作权限操作当前目录
// 打开b.php文件,这里采用的是a+,也可以用a,a+为可读可写,a为只写,如果b.php不能存在则会创建它
$file = fopen(self::$dir.self::gethash($uid).”xml”, ‘a+’); //a模式就是一种追加模式,如果是w模式则会删除之前的内容再添加
// 获取需要写入的内容
// 写入追加的内容
fwrite($file, $data);
// 关闭b.php文件
fclose($file);
// 销毁文件资源句柄变量
unset($file);
}

public function save_first($data,$uid){
chmod(dirname(__FILE__), 0777); // 以最高操作权限操作当前目录
// 打开b.php文件,这里采用的是a+,也可以用a,a+为可读可写,a为只写,如果b.php不能存在则会创建它
$file = fopen(self::$dir.self::gethash($uid).”xml”, ‘w+’); //a模式就是一种追加模式,如果是w模式则会删除之前的内容再添加
// 获取需要写入的内容
// 写入追加的内容
fwrite($file, $data);
// 关闭b.php文件
fclose($file);
// 销毁文件资源句柄变量
unset($file);
}

public static function gethash($uid){
$count = 10;
$d =intval(base_convert(substr(md5($uid), 0, 5),16, 10)) %$count;
return “t_user”.’_’.$d;
}

 

 

然后是工具类的调用

 

$doc = new SphinxXMLFeed();
 
//配置sphinxfields字段 用于查询时过滤使用
$doc->setFields(array(
  'title',
  'teaser',
  'content',
));
 
//配置sphinx 的attr字段,搜索会返回该字段,这里q支持string的,大家可以试试
$doc->setAttributes(array(
  array('name' => 'blog_id', 'type' => 'int', 'bits' => '16', 'default' => '0'),
));
 
//以上2个配置必须在调用该方法之前,不在这里配置也行也可以在sphinx的配置文件里配置
//输出xml开头部分
$doc->beginOutput();  

//这里应该是从数据库取出的数据,为了方便我这里直接随机生成了1000条记录 foreach(range(1, 1000) as $id) { $doc->addDocument(array( 'id' => $id, 'blog_id' => rand(1, 10), 'title' => "Article Part {$id}", 'teaser' => "Article {$id} teaster", 'content' => "Article {$id} content", )); }   
//输出xml结尾部分
$doc->endOutput();

//最后是如何在sphinx里调用该 xml文件,

//大家上面看我保存的路径是/var/log/…(我这是Linux系统)

 

source xml_blog_posts
{
    type = xmlpipe
    xmlpipe_command = cat /var/log/你保存的文件名.xml
}

其他配置这里就不赘述了,相信大家也知道了。谢谢


sphinx 使用 python xmlpipe2 数据源 生成索引

source testxml { type = xmlpipe2 xmlpipe_command = python /tmp/testx.py } index testxml { ...
  • huithe
  • huithe
  • 2011年07月09日 18:05
  • 1851

Sphinx-xml 结构

characters
  • taiyb
  • taiyb
  • 2015年06月29日 21:28
  • 220

sphinx结合mongodb、xml做全文搜索

首先我们需要,安装sphinx mongodb 如何安装mongodb可以参考:http://blog.sina.com.cn/s/blog_abba9c1d0101cmd1.html 安...

sphinx 采用c扩展xmlpipe2数据源 .

由于要采用sphinx 作为全文检索引擎,但是我的很多数据都存在硬盘上,如果这些数据都读入数据库那就太痛苦了,数据量很大,mysql数据库存储这些数据,只能是为了全文检索,那也过于浪费了,所以决定采用...

Sphinx 三种常见数据源配置

MySQL 数据源: /usr/local/etc/sphinx.conf #配置source source blog { type = mysql sql_host = localhost sq...

weblogic1036+db2数据源配置

  • 2017年08月29日 00:32
  • 585KB
  • 下载

DB2+II数据源配置指南

  • 2014年07月02日 17:05
  • 1.96MB
  • 下载

dbcp2数据源配置详解

配置dbcp2数据源 # 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/ssb_test spring.datasource.driv...

ORACLE、informix和DB2数据源配置

  • 2016年07月18日 12:49
  • 1.59MB
  • 下载

DB2联合数据库II数据源配置指南

  • 2009年10月22日 16:54
  • 3.36MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sphinx xmlpipe2数据源配置
举报原因:
原因补充:

(最多只允许输入30个字)