2013-01-25 69 views
1

我用這個查詢我的表fulltextsearch:MySQL的fulltextsearch:沒有結果

SELECT Titel FROM cmsa WHERE MATCH(Titel) AGAINST ('+"Ort" +"Berlin"' IN BOOLEAN MODE) 

但結果是空的。

如果我使用

SELECT Titel FROM cmsa WHERE Titel LIKE '%Berlin%' 

結果將是(不帶引號):

"Ort - Berlin" 

爲什麼fulltextsearch沒有找到這樣的結果。在入門領域Titel的單詞「的Ort」和單詞「柏林」都是。

其他全文搜索的偉大工程。

任何想法?

回答

2

嘗試不使用雙引號,並確保Mysql的發動機MYISAM

SELECT 
     Titel 
FROM 
     cmsa 
WHERE 
     MATCH(Titel) AGAINST ('+Ort +Berlin' IN BOOLEAN MODE) 

一些解釋

布爾模式搜索

SELECT headline, story FROM news 
WHERE MATCH (headline,story) 
AGAINST ('+Hurricane -Katrina' IN BOOLEAN MODE); 

上面的語句將匹配有關颶風的新聞報道,但不是那些提到卡特里娜颶風的人。

查詢擴展

盲查詢擴展(或自動相關性反饋)功能可以用來擴大搜索的結果。這通常包括更多的噪音,是個非常模糊搜索。

在大多數情況下,如果用戶查詢返回短短結果你會使用這個操作,你再次嘗試使用查詢擴展,它會增加通常與查詢詞找到的詞。

SELECT headline, story FROM news 
WHERE MATCH (headline,story) 
AGAINST ('Katrina' WITH QUERY EXPANSION); 

上述查詢可能會返回所有關於颶風的新聞報道,而不僅僅是包含卡特里娜颶風的新聞報道。

有幾點關於MySQL全文搜索:

  • 搜索不區分大小寫
  • 短詞被忽略,默認最小長度爲4個字符。您可以更改最小和最大字長用的ft_min_word_len變量和ft_max_word_len

  • 詞叫詞語將被忽略,你可以指定自己的停用詞,但默認情況下的話包括,有一些 - 看到默認 停用詞列表。

  • 您可以通過可變ft_stopword_file設置爲空字符串,禁用停用詞。
  • 全文搜索僅由MyISAM存儲引擎支持。
  • 如果一個單詞出現在超過50%的行中,它的權重爲零。這在大數據集上具有優勢,但是可以使小測試難以進行 。
+0

感謝您的幫助這個表達式適用於這種情況。但是,如何在沒有雙引號的情況下搜索+ Ort +「Berlin Kreutzberg」? – Mike

-1

您的查詢完全適用於我。請檢查您的表是否是MYISAM,因爲全文搜索僅在myisam引擎中工作。

+1

全文搜索也可以在其他情況下在同一張表中使用。它是一個帶有Titel全文索引的MyISAM表。 – Mike