2016-09-02 156 views
0

對於我網站上的一個小而簡單的搜索工具,我使用MySQL的MATCH AGAINST根據搜索詞找到最相關的行。現在我用這個查詢:MySQL搜索匹配詞的一部分

SELECT * FROM mytable WHERE MATCH (name,description) AGAINST ('".$term."*' IN BOOLEAN MODE) 

如果我,例如,搜索「SYS」查詢給了我像一個或多個系統的話造成的。我遇到的問題以及我想要實現的目標是,當搜索項是'系統'時,我只會用'系統'這個確切的單詞得到結果,我希望得到'系統'這個詞的結果,以及。

我已經檢查了Docs,但似乎找不到解決方案。有人遇到過這個嗎?

+0

這是不可能的。想想看。有了這個:''「。$ term。」*'你定義了,如果搜索以''systems *''開始,那麼它會向你顯示每條記錄,以'system'和''systemstools'開頭的' ,等等......如何讓mysql知道,如果你最後用's'命名搜索詞,你需要''system''? – vaso123

+0

我明白了。但是,有什麼辦法可以做到這一點? – Mikelo

+0

剪下最後一個字母或最後一個字母,或使用前三個字,我不知道,你的邏輯是什麼。 – vaso123

回答

0

這是有點長的評論。

您要求的內容通常以全文搜索引擎中的兩種方式之一實現。更常用的方法是術語的同義詞列表。這些可以讓你說「系統」和「系統」是一回事。

據我所知,MySQL不支持同義詞列表。您可以通過預處理數據或查詢來替換同義詞值,以繁瑣的方式自己實現它們。

第二種方法稱爲詞幹。這將單詞轉化爲它們的「根」形式,因此「系統」將被識別爲「系統」的複數,並且兩者將匹配。系統只能在查詢中應用。或者,對於真正雄心勃勃的,它也可以應用在文檔存儲方面。這個問題存在歧義。英語(以及其他語言)在詞幹無意義的情況下有例外。