2017-06-06 65 views
1

我正在建立一個網站的文章部分,我正在尋找一個搜索功能,將搜索文章標題和文章內容的結果,包含所有的搜索詞,然後將返回包含搜索字詞的文章結果,如以下示例: 搜索字詞:「Facebook調整了新聞Feed以限制'spammy'和誤導性廣告」。Mysql搜索2列和更相關的訂單

這將是理想的返回確切的期限匹配的所有結果,然後通過更多的相關搜索結果,如「臉譜調整新聞提要」等

以下是我做了到目前爲止的代碼:

"p.Title,p.ID,p.Publish_Date, p.Sponsored, p.Featured, p.Seo_Link, p.Content, 
       (SELECT GROUP_CONCAT(t.Tag_ID) 
       FROM Tag_Post_Relationship t 
       WHERE p.ID = t.Post_ID) AS Tags, 
       MATCH (Title, Content) AGAINST ('".$search_term."'IN BOOLEAN MODE) AS Relevance FROM Posts p WHERE NOT Post_Type = 'p' AND Publish_Date < '{$dateNow}' AND Visibility = 'p' AND 
       (MATCH (p.Title, p.Content) AGAINST ('".$search_term."' IN BOOLEAN MODE)) 

       ORDER BY Relevance DESC" 

回答

0

要在SQL數據庫中有效執行此操作,您需要實現模糊文本比較算法(如Levenshtein距離作爲函數或可以調用的proc)。這將允許您根據它們與您的搜索詞匹配的程度對您的文章進行排名。 SQL中的Levenshtein距離示例如下:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=66781

在請求搜索時執行的存儲過程中使用該算法。存儲的proc會將搜索詞與每個標題和文章進行比較,並通過最接近的匹配對結果進行排序,對於完全匹配,這將是1。

SQL之外還有許多可用於API級別的高級文本分析包。我使用了Python的Jellyfish和NLTK庫,效果很好。

另一種選擇是使用諸如Apache Solr(http://lucene.apache.org/solr/features.html)或Elastic Search之類的東西,它提供了一個隨時可用的API,用於文檔和數據的全文搜索。這會增加您的體系結構的複雜性。

+0

謝謝,沒有大的預算分配給這個項目,因此,我正在尋找一個簡單快捷的SQL解決方案 –

+0

然後它將需要是模糊文本比較功能。我發佈的鏈接是一個體面的例子。請注意,大型數據集的性能可能會很差,因爲函數非常複雜,而且SQL引擎通常不針對大容量部分文本搜索進行優化。 – dataHead