2011-07-15 126 views
0

我有這樣的SQL查詢:mysql搜索。要求所有關鍵字

SELECT DISTINCT url FROM paragraphs WHERE 
    MATCH (title) AGAINST('$query') ORDER BY 
    MATCH (title) AGAINST('$query') DESC 

會發生什麼事,雖然是當我搜索,例如,對於「約翰·史密斯」我得到的「約翰」,「約翰·錢伯斯」 ...等。我怎樣才能讓這兩個詞都是必需的?

+2

'WHERE標題LIKE '%約翰·史密斯%''?你不需要FULLTEXT來做直接的子字符串搜索。 –

+0

爲此,您可以嘗試使用「LIKE」而不是使用全文搜索。 – Balanivash

+1

嗯,我想使用索引...這將以相同的效率工作嗎? – re1man

回答

0

你可以額外LIKE條款添加到你這裏來過濾掉所有不需要的匹配:

SELECT DISTINCT url FROM paragraphs WHERE 
    MATCH (title) AGAINST('$query') AND title LIKE "%$query%" 
    ORDER BY MATCH (title) AGAINST('$query') DESC 

因此,你有得分,只有結果精確匹配。

+0

不會讓事情變得很慢嗎? – re1man

+0

其他過濾器不應該放慢速度,因爲您只是扔掉一些已經找到的行。使用'EXPLAIN SELECT ...'查看查詢如何改變其性能。 – arnep

+0

好的謝謝,幫助:) – re1man

0

在布爾搜索使用+應所需的所有的話:

<?php 

$query = str_replace(" "," +",$query); 

$sql = "SELECT DISTINCT url FROM paragraphs WHERE 
      MATCH (title) AGAINST('$query' IN BOOLEAN MODE)) 
      ORDER BY score DESC;" 

?> 

Dev.MySQL.com: 11.9.2. Boolean Full-Text Searches