2012-11-02 116 views
3

所以我想使用全文搜索實現更好的搜索功能,但它不像預期那樣工作。它不會返回任何結果,或者我認爲不相關的結果。mysql全文搜索沒有返回預期結果

首先我檢查:

顯示變量,如 'ft_min%'

...回報爲4

所以我有一個完整的遊戲數據庫。搜索的一個很好的例子是「刺客信條」。在數據庫中它們實際上被存儲爲「刺客信條」(注意撇號)。所以,如果我做了以下查詢:

SELECT g_name,MATCH(g_name)反對( '刺客信條')AS評分由 tgmp_games WHERE MATCH(g_name)反對( '刺客信條')的限制15

返回結果罰款(以下一些)

...但與搜索腳本,它採用了jQueryUI的自動完成下拉菜單,然後提交查詢用更少的字符什麼比整個單詞時,它回來了空

SELECT g_name,MATCH(g_name)反對( '刺殺了')AS評分由 tgmp_games WHERE MATCH(g_name)反對( '刺殺了')的限制15

我也讀到行的數如果數據庫太低,數據庫可能會產生影響,但在那裏有25k行,所以應該沒問題。我究竟做錯了什麼?

我可以得到的結果的輸出,但更感興趣的是如何獲得零件搜索條件以返回一些結果。

Array 
(
    [g_name] => Assassins Creed III 
    [score] => 15.406005859375 
) 

Array 
(
    [g_name] => The Witcher 2: Assassins of Kings 
    [score] => 8.46316719055176 
) 

Array 
(
    [g_name] => Tenchu: Shadow Assassins 
    [score] => 8.46316719055176 
) 

Array 
(
    [g_name] => The Witcher 2: Assassins of Kings - Enhanced Edition 
    [score] => 8.27909851074219 
) 

Array 
(
    [g_name] => Assassin\'s Creed 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin\'s Creed III 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin's Creed II 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin's Creed: Revelations ... 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin\'s Creed: Revelations 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Brotherhood 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Bloodlines 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed II: Discovery 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin\'s Creed III: Liberation 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Altair's Chronicles 
    [score] => 6.69712924957275 
) 

Array 
(
    [g_name] => Assassin's Creed II: Bonfire of the Vanities 
    [score] => 6.69712924957275 
) 

另外這個命令的順序很奇怪,因爲「巫師2」比其他「刺客信條」遊戲更高。不知道是否有某種模式可以讓它避免陷入標點符號?

+0

您正在使用'limit'而沒有'order by'。您可能想在「限制」之前添加「按分數降序排列」。 –

+0

爲什麼一些撇號在結果示例中轉義而有些不是? –

+0

爲了搜索的目的,您可以去除所有標點符號。 –

回答

5

查看用於布爾搜索的MySQL文檔。 http://dev.mysql.com/doc/refman/5.5/en//fulltext-boolean.html。你可能想要使用的是*運算符(類似於%通配符)。因爲MySQL的適用於全文索引的50%的規定

MATCH(g_name)AGAINST( '*刺殺了' IN BOOLEAN MODE)

行的表中的次數進入的影響。如果一個單詞出現在表中超過50%的行中,那麼MySQL認爲它在提供縮小結果的任何值時過於常見,並且它被忽略。這通常用於消除諸如「the」之類的詞。

+0

正是我需要的,謝謝!還有用於知道重新:50%的規則 – Horse