php - Sphinx 结果在空格后不返回匹配项

标签 php mysql laravel-5.1 sphinx

当尝试搜索 bmw motorrad 或其部分内容时。

宝马还行

bmw m或任何字符后返回无结果

宝马摩托车回归公司

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

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

Shpinx session :

开始公司快速搜索

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' ),
)

);

sphinx搜索搜索查询

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;
}

感谢您的关注并感谢任何帮助。

最佳答案

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

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

enable_star 作为一个选项已被废除(并且现在始终有效 =1)

所以你需要添加星星。可以在代码中做到这一点。将查询更改为“bmw m*”

但是,expand_keywords=1 可以为您提供类似(但不相同)的行为,但排名会略有变化。 理论上不需要更改其他代码。

关于php - Sphinx 结果在空格后不返回匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998522/

相关文章:

php - 未捕获的异常 'PDOException',消息为“SQLSTATE[42S22] : Column not found”

php - 浏览器 MMORPG 基本理念

java - 使用 Saxon java 工具(命令行)从 xsl 查询 mysql 数据库需要什么?

laravel-5.1 - 获取关系 laravel 5 中的所有子类别

laravel - 使用 Eloquent 手动注入(inject)模型关系

php - 教义和内存

php - 如何从 Prestashop 删除的名字和姓氏发票地址字段中删除 "undefined"值

php - 如何在codeigniter中使用mpdf?

php - 登录 session 问题

javascript - Laravel 使用 JavaScript 重定向