2010-08-29 104 views
2

我正在編寫一些代碼來自動標記一些文章。MySQL:在全文搜索中查找多個單詞 - 完全匹配只有

我有一個標籤數組和一個文章表。我運行下面的查詢,以檢查匹配標籤頭條:

SELECT headline 
    FROM `news` 
WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE) 

這個發現與標題完全一樣的短語「綠日」的所有文章 - 沒有第一個+,我得到的僅包含這個詞的文章「綠色'。

這並不完美,有些標籤會導致不準確的結果 - 例如一個名爲Die! Die! Die!(不要求)的標籤會返回每個標題中帶有「die」字樣的標題。

有什麼明顯的我在這裏失蹤?我想要的只是包含整個短語的標題,而不是輸入。

回答

3

據我在docs中看到的,使用引號就足夠了。從文檔頁面上的例子:

「有些話」

尋找包含原短語「some words」的(例如,包含「一些智慧的話」行行,但不「一些噪音詞」)。請注意,「「」字符括起來的短語是界定短語的操作符字符它們不是包圍搜索字符串本身的引號

+0

你是對的 - 不能相信我錯過了這個。謝謝! – 2010-08-29 21:14:06

0

如果你想整個短語匹配,那麼你應該這樣做:

SELECT headline FROM news WHERE headline LIKE '%Green Day%'

,將返回你的結果在標題短語「綠日」。

+0

不是 - 先試了一下。適用於「綠色日」,但如果我有一個像「Error」這樣的標籤,它也會將標題與「恐怖」一詞相匹配。 – 2010-08-29 21:12:38

+0

@Matt - 那麼你應該嘗試使用正則表達式搜索和設置字邊界 – 2010-08-29 21:14:29

+0

...或使用全文索引:) – 2010-08-29 21:15:59

1

@馬特 - 。比賽的原因‘恐怖’採用米奇的代碼是因爲你沒有第一個%字符後留下的空間。 精確搜索的單個單詞的正確語法應該是這樣的

SELECT headline FROM news WHERE headline LIKE '% Green Day %' 

這將管理中檢索搜索中輸入的單詞請求完全相同的方式。

2

你必須在雙引號附近放置額外的單引號,這意味着確切的單詞查詢。 +運算符僅表示AND邏輯。

SELECT headline 
    FROM `news` 
WHERE MATCH(headline) AGAINST ('"+Green +Day"' IN BOOLEAN MODE)