当尝试搜索 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/