Shpinx结果不会在空格后返回匹配

时间:2016-06-23 17:47:39

标签: php mysql laravel-5.1 sphinx

当试图搜索宝马或其部分时。

bmw没问题

bmw m或返回后没有结果的任何字符

bmw motorrad返回公司

我们终于有机会将我们的服务器从托管转移到自我管理。在这个过程中我们将mysql从5.0.37升级到5.5.28。

我们还将spphinx从0.9.9升级到2.2.10,并将Sphinx作为mysql引擎。我们正在使用Laravel 5.1并使用包sngrl \ SphinxSearch连接到sphinx。

Shpinx Conf:

启动公司快速搜索

source companyqs
{
        type                    =       mysql
        sql_query_pre           =       SET NAMES utf8
        sql_query               =       SELECT c.companyID, c.companyID AS priID , TRIM(REPLACE(c.coName, SUBSTRING(c.coName,LOCATE('[',c.coName), (LOCATE(']',c.coName)) - LOCATE('[',c.coName)+1), '')) AS companyName FROM company c WHERE c.coType = "Corporate" AND companyID >= $start AND companyID <= $end

        sql_attr_uint           =       priID
        sql_field_string        =       companyName
        sql_attr_string         =       cityState
        sql_attr_string         =       locationType
        sql_attr_string         =       cWebDisplay

}

index companyqs
{
        source                  =       companyqs
        path                    =       /usr/local/sphinx/var/data/companyqs
        min_word_len            =       2
        min_infix_len           =       1
}

配置sngrl \ SphinxSearch

return array (
'host'    => env('SPHINX_DEV_HOST'),
'port'    => 9312,
'indexes' => array (
    'companyqs' => array ( 'table' => 'company', 'column' => 'companyID' ),
)

);

sphinxSearch搜索查询

public function getQSAdvertiser($keyword){
    $sphinx = new SphinxSearch();
    $results = $sphinx
        ->search($keyword, 'companyqs')
        ->limit(10000)
        ->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED2)
        ->setRankingMode(\Sphinx\SphinxClient::SPH_RANK_MATCHANY)
        ->query();

    return $results;
}

感谢您寻求并感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可能需要将min_word_len更改为1才能获得单个字符匹配。

但0.9到2.2也是一个很大的跳跃!许多默认值已更改。主要是我认为旧版本可能有enable_star=0作为默认值。

enable_star已被废除作为一种选择(现在有效地= 1)

所以你需要添加星星。可以在代码中执行此操作。将查询更改为&#39; bmw m *&#39;

但是expand_keywords=1会给你类似(但不完全相同)的行为,会稍微改变排名。 理论上,这不需要其他代码更改。