实时索引配置

coreseek 4.0测试版/Sphinx 1.x-beta支持了实时索引功能,其基本使用如下:

RT实时索引手册:点击查看

实施索引配置:

#RT实时索引配置,详情请查看:http://www.coreseek.cn/products-install/rt-indexes/

#RT实时索引定义
index rtindex
{
    type                    = rt
    path            = var/data/rtindex #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    
    #RT实时索引字段配置,详情请查看:http://www.coreseek.cn/products-install/rt-indexes/
    #字段设置顺序:field, uint, bigint, float, timestamp, string;顺序不可颠倒,否则产生混乱
    #使用后,不可更改字段设置,除非删除所有索引文件重新建立,否则产生混乱

    #文档编号字段
    #id                                               #系统自动处理

    #全文索引字段
    rt_field                  = title               #全文索引字段
    rt_field                  = content         #全文索引字段

    #属性字段
    rt_attr_uint            = groupid
    rt_attr_bigint         = biguid
    rt_attr_float           = score
    rt_attr_timestamp  = date_added

    #存储内容字段
    rt_attr_string          = author          #存储author的内容

    #已设置全文索引,并需要同时存储内容的字段
    rt_attr_string          = title              #同时存储title的内容
    rt_attr_string          = content        #同时存储content的内容

    #RT实时索引内存设置
    rt_mem_limit = 512M
}

#searchd服务定义
searchd
{
    listen                  =   9312
    listen                  = localhost:9306:mysql41    #MySQL 协议支持与SphinxQL,详情请查看:http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html#sphinxql
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1
    pid_file = var/log/searchd_rtindex.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = var/log/searchd_rtindex.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = var/log/query_rtindex.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path = var/log/rtindex/       #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_flush = 2
    binlog_max_log_size = 16M
}

PHP测试程序:

<?php
// --------------------------------------------------------------------------
// File name   : test_coreseek_rtindex.php
// Description : coreseek中文全文检索系统实时索引测试程序
// Requirement : PHP5 (http://www.php.net)
//
// Copyright(C), HonestQiao, 2011, All Rights Reserved.
//
// Author: HonestQiao (honestqiao@gmail.com)
//
// 最新使用文档,请查看:http://www.coreseek.cn/products/products-install/
//
// --------------------------------------------------------------------------

#连接到实时索引,使用MySQL41协议
$link = mysql_connect('localhost:9306') or die('connect bad');
if (!$link) {
    echo mysql_errno() . ": " . mysql_error(). "\n";
    exit;
}
else
{
    echo "搜索服务:连接成功\n";
}

#查询id为1的文档
$id=1;
$query=mysql_query("SELECT * FROM rtindex WHERE id=$id");
if(mysql_errno())
{
    echo mysql_errno() . ": " . mysql_error(). "\n";
    exit;
}
else
{
    echo "查询数据:查询成功\n";
}

if(mysql_num_rows($query)){
    echo "查询数据:id为 $id 的数据存在\n";
    while($row=mysql_fetch_array($query,MYSQL_ASSOC))
    {
        printf("标题:%s\n",$row['title']);
    }
}
else
{
    echo "新增数据:插入id为 $id 的数据\n";

    $title = '愚人节最佳蛊惑爆料 谷歌300亿美元收购百度';
    $content = '据国外媒体报道,谷歌将巨资收购百度......今天看来,“百度一下”已经成为3亿多中国网民的网络生存法则,而直到今天环视全球,真正能像中国一样,拥有自己独立搜索引擎的只有4个国家!......';
    $groupid = 1;
    $biguid = '12345678901234';
    $score = 12.34;
    $date_added = time();
    $author = '知名编辑';

    //主键id,需要自己设置,不会自动生成或者递增(AUTO_INCREMENT)
    $content = mysql_escape_string($content);
    mysql_query($sql="INSERT INTO rtindex(id,title,content,groupid,biguid,score,date_added,author) VALUES ( $id, '$title', '$content', $groupid,$biguid,$score,$date_added,'$author')");
    if(mysql_errno())
    {
        echo mysql_errno() . ": " . mysql_error(). "\n";
        echo $sql;
        exit;
    }
    else
    {
        echo "新增数据:插入成功\n";
    }
}

echo "\n全文检索:\n";
$query=mysql_query("SELECT * FROM rtindex WHERE MATCH('网络搜索')");
if(mysql_errno())
{
    echo mysql_errno() . ": " . mysql_error(). "\n";
    exit;
}
else
{
    echo "搜索数据:搜索成功\n";
}
while($row=mysql_fetch_array($query,MYSQL_ASSOC))
{
    print_r($row);
}

echo "搜索数据:状态获取\n";
$query=mysql_query("SHOW META");
if(mysql_errno())
{
    echo mysql_errno() . ": " . mysql_error(). "\n";
    exit;
}
else
{
    echo "搜索数据:状态获取成功\n";
}
while($row=mysql_fetch_array($query,MYSQL_NUM))
{
    printf("%s\t%s\n",$row[0],$row[1]);
}