SPHINX(搜索):伪造sql就像查询一样

时间:2011-01-25 19:48:28

标签: php sql sphinx

我对狮身人面像很新,所以我有一个问题。

假设我有一个名为 tv_releases

的表格

我的sphinx.conf包含(小部分):

source tv_releases
{
    type            = mysql

    sql_host        = localhost
    sql_user        = ---------
    sql_pass        = ---------
    sql_db          = --------
    sql_port        = 3306  

    sql_query_pre = SET NAMES utf8

    #ingore for example ( delta updates ).
    sql_query_pre = REPLACE INTO title_counter SELECT 3, MAX(id) FROM tv_releases

    sql_query = SELECT id,rel ,tv_id,total_subs FROM tv_releases\

     #ignore for example ( delta updates).
     WHERE id<=( SELECT max_doc_id FROM title_counter WHERE counter_id=3 )

    sql_attr_uint = total_subs
    sql_attr_uint = tv_id
}

索引很好,也可以查询。

现在sphinxapi(php)(部分):

$sp = new SphinxClient();
---...

$sp->SetMatchMode(SPH_MATCH_ALL);
$sp->SetArrayResult(true);
$sp->SetLimits ( 0, 100);
$sp->SetSortMode ( SPH_SORT_EXTENDED, "@relevance DESC, ....more options" );



  $results = $sp->Query('SEARCHTERM', 'tv_releases');

现在我的问题:

假设我有以下版本(在表中称为rel)。

rel 1 : Name s01e02 Format-extradata
rel 2 : Name s01e03 Format-extradata
rel 3 : Name s02e05 Format-extradata
rel 4 : Name s02e06 Format-extradata
rel 5 : Name s03e06 Format-extradata

当我的SEARCHTERM为“名称S01

我想要匹配的版本(rel)(由Relevance排序)

将从包含名称s01e **

的所有版本开始

问题是,它不会这样做。 在sql中使用简单的“名称s01%”就可以了,但是狮身人面像的全部意义在于速度。

有人解决了如何在sphinx中完成所需(搜索)结果的问题吗?

干杯

1 个答案:

答案 0 :(得分:2)

min_prefix_len(http://sphinxsearch.com/docs/current.html#conf-min-prefix-len)可以为您提供帮助。

祝福, 塞吉