2012-02-23 58 views
3

下面是一個示例sql我堅持,它不會返回一個名爲「磨酒店」的酒店 它返回10個其他酒店。任何幫助將是巨大的感謝mysql匹配〜示例


SELECT * FROM tbl WHERE match(hotel) against('the mill hotel' IN BOOLEAN MODE) LIMIT 10"; 

+0

我的SQL已經發現了它,但我已經限制爲10,它不在前10?如果我說酒店這個詞不那麼重要,那麼它可能會起作用? SELECT * FROM tbl WHERE match(hotels)against('mill Harry 2012-02-23 11:39:15

回答

6

你需要指定運營商,因爲在一個或操作不指定任何結果。試試這個:在這種情況下

SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10"; 

Read more

+0

match match關鍵字是否可以傳遞不同的列名稱? – 2015-10-27 11:48:40

0

使用+ (plus) ...

SELECT * FROM tbl WHERE match(hotel) against ('+the mill hotel' IN BOOLEAN MODE) LIMIT 10"; 

this的詳細信息。

2

您可以隨時使用引號的短語mill hotel匹配,而不是的話mill和/或hotel

SELECT * FROM tbl WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE) LIMIT 10; 

,或者乾脆:

SELECT * FROM tbl WHERE match(hotel) against('"mill hotel"' IN BOOLEAN MODE) LIMIT 10; 

我相信所有

SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10; 

確實需要這個詞the匹配,留下millhotel可選:如果要需要整個短語,它需要加引號:

SELECT * FROM tbl WHERE match(hotel) against('+"the mill hotel"' IN BOOLEAN MODE) LIMIT 10; 

雖然當你只有一個搜索詞,在這個例子中,加號是多餘的。

0

12.9.2布爾全文搜索

的MySQL就可以使用IN BOOLEAN MODE修改布爾全文搜索。

布爾全文搜索具有以下特點:

  • 他們不會自動排在降低相關性進行排序。

12.9.1自然語言全文搜索

默認情況下,或與在語言上固有模式修改的MATCH()函數執行鍼對文本集合字符串的自然語言搜索。集合是包含在FULLTEXT索引中的一個或多個列的集合。搜索字符串作爲參數AGAINST()給出。對於表中的每一行,MATCH()都返回一個相關性值;即搜索字符串與MATCH()列表中所列列中該行文本之間的相似性度量。

因此,您需要對它們進行排序或刪除結果限制。