当试图搜索宝马或其部分时。
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
}
return array (
'host' => env('SPHINX_DEV_HOST'),
'port' => 9312,
'indexes' => array (
'companyqs' => array ( 'table' => 'company', 'column' => 'companyID' ),
)
);
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;
}
感谢您寻求并感谢任何帮助。
答案 0 :(得分:0)
您可能需要将min_word_len
更改为1才能获得单个字符匹配。
但0.9到2.2也是一个很大的跳跃!许多默认值已更改。主要是我认为旧版本可能有enable_star=0
作为默认值。
enable_star
已被废除作为一种选择(现在有效地= 1)
所以你需要添加星星。可以在代码中执行此操作。将查询更改为&#39; bmw m *&#39;
但是expand_keywords=1
会给你类似(但不完全相同)的行为,会稍微改变排名。
理论上,这不需要其他代码更改。