2011-08-26 59 views
0

我目前正忙於創建一個搜索功能,查詢用戶輸入字符串對一個MySQL表中的某一行。PHP/MYSQL - 需要一個更好的方式去這個FULLTEXT搜索查詢

這是代碼的樣子至今:

$space_separated = implode(" ", $keywords_array); 

$dataQuery = "SELECT id, `desc`, price1, pack, measure, quantity 
       FROM products 
       WHERE MATCH (`desc`) 
       AGAINST ('".$space_separated."' IN BOOLEAN MODE)"; 

這是不太提供所需的功能。我知道在布爾模式下,我不喜歡使用評分。但我的問題是,這段代碼確實會返回任何字詞上的部分匹配。

一個例子是,如果用戶搜索「巧克力」,他們搜索「olate」,則不會返回任何匹配。我將如何解決這個問題?

@馬克

是你建議嗎?

$dataQuery = "SELECT id, `desc`, price1, pack, measure, quantity 
       FROM products 
       WHERE MATCH (`desc`) 
       AGAINST ('".$space_separated."' IN BOOLEAN MODE) 
       OR MATCH (`desc`) 
       AGAINST ('".$space_separated."')"; 
+1

添加'...或匹配(...)'以進行自然語言匹配(再次執行全文,但沒有'布爾模式')? –

+0

@Mark感謝您對此的意見,請參閱我的文章中的編輯。那是你所指的? –

+1

是的,非常。但正如下面的golez所指出的那樣,除非你添加通配符,否則fulltext只能匹配全部單詞。 –

回答

1

FULLTEXT僅搜索整個單詞。您可以在單詞的一部分後面指定通配符*,但不能在之前。所以choco*將匹配chocolate', but * olate`不會。

另外,默認匹配使用or進行比較。如果您想匹配所有關鍵字,請在每個關鍵字前添加一個+

+0

謝謝你的答覆,我正在尋找一個解決方法或更好的選擇,但這個功能。我確實想到了通配符方法,但得出了相同的結論。任何其他想法? –

+1

您可以使用單獨的搜索實用程序,如Sphynx。你也可以自己編寫一些代碼。如果你用不同的單詞分割文本,你可以爲它創建一個索引。然後,您還可以將這些單詞拆分爲只索引其中的一部分。這樣,您可以爲單詞或單詞的某些部分進行完全匹配。不過,這將是一些工作,所以你最好先試用一些第三方解決方案。 – GolezTrol

+0

謝謝你,這是有道理的。我會檢查出斯芬克斯。我想添加某種同義詞功能,這聽起來有點相似。我會努力:) –

相關問題