Mysql搜索2列和更相关的顺序
我正在构建一个包含文章部分的网站,我正在寻找一种搜索功能,该功能将搜索文章标题和文章内容以获得包含所有搜索词的结果,然后返回包含搜索词语的文章结果,例如以下内容例如: 搜索字词 :“Facebook调整新闻馈送来限制”垃圾邮件“和误导性广告”。
这将是理想的返回所有结果匹配的确切期限,然后搜索更相关的结果,如“Facebook调整新闻提要”等。
以下是我迄今为止所做的代码:
"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"
要在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,用于跨文档和数据的全文搜索。 这会增加您的体系结构的复杂性。
链接地址: http://www.djcxy.com/p/75285.html