2013-08-31 34 views
1

IM一個sql,但我有一件事,當我使用獅身人面像比較返回不太匹配使用獅身人面像,使searchs在我的網站,例如搜索

LIKE '%19.628%' 

返回即時尋找的數據(在phpMyAdmin搜索8匹配),但是當我使用獅身人面像比較一個SQL LIKE搜索返回較少的匹配(3匹配)。

這裏的PHP代碼

$sp->SetMatchMode(SPH_MATCH_ANY); 
$sp->SetArrayResult(true); 
$sp->SetLimits(0,1000000); 
$results = $sp->Query($query, 'data_base'); 

爲什麼呢?

關於

回答

1

Sphinx不像MySQL那樣使用通配符。這有幾個原因,你可能沒有得到你想要的結果;

  • 在您的示例中,MySQL將評估該字段中的整個值。然而,獅身人面像可能會看到字符串19.628稍有不同。如果您使用默認的phrase boundary,那麼獅身人面像會將該字符串分成2個單詞,可能會導致不同的結果。

  • $query的值究竟是什麼?我會懷疑這將是'* 19.628 *'的問題。如果您沒有啓用star syntax,則可能無法獲得要查找的結果。

+0

感謝您的幫助,即時通訊使用defautl phrase_boundary,'$ query'僅包含19.628,star_syntax,未啓用。我更改配置文件添加您的建議,問題繼續,這裏是我的配置文件的一部分: –

+0

'phrase_boundary_step = 100'' phrase_boundary =。,?,!,U + 2026'' enable_star = 1',即時通訊認爲問題在sql_query中有起源,導致即時通訊使用這個'SELECT * FROM juris',可以嗎? –

+0

defualt phrase_boundary是空的。此外,它隻影響存儲索引的單詞位置,停止從匹配的acorss邊界顯式的詞組搜索。它不影響查詢,在phrase_boundary中的字符在查詢中沒有任何特殊含義。 – barryhunter

1

記住那個獅身人面像索引整個單詞在默認情況下,所以不會連得部分字匹配,除非用綴/前綴索引明確地啓用它 - 有或沒有enable_star。

19.628的獅身人面像查詢只會查找文檔中任何地方的整個單詞19628。 Asumming .當然不在你的charset_table!

其實你甚至可以啓用Any模式。所以它只查找其中一個單詞。

所以要獲得相同的文件匹配,需要使用Extended模式。圍繞在"中的查詢來獲取詞組匹配。並使用*代替%

$cl->setMatchMode(SPH_MATCH_EXTENDED); 
$cl->Query('"%19.628%"',$index); 

對於索引設置,你不想在phrase_boundary.(因爲要使用短語檢索),則需要啓用部分字匹配 - 與min_infix_len,因爲想*在開頭和單詞的末尾(如果使用enable_star=1)。

您可以選擇是否需要charset_table中的.。對於這個查詢應該沒什麼關係。

(tangental,但你真的高$上限不會actully申請,setLimits具有第三$ max_matches PARAM,這臺最高$偏移+ $限制,你可以使用 - 默認爲1000)