我正在构建一个带有文章部分的网站,我正在寻找一个搜索功能,它将搜索包含所有搜索词的结果的文章标题和文章内容,然后将返回包含搜索词词汇的文章结果如下例所示: 搜索字词:“Facebook调整新闻Feed以限制'垃圾邮件'和误导性广告”。
最理想的做法是返回与确切字词匹配的所有结果,然后搜索更相关的结果,例如“Facebook调整新闻Feed”等。
以下是我到目前为止所做的代码:
"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 :(得分:0)
要在SQL数据库中有效地执行此操作,您需要实现模糊文本比较算法,例如Levenshtein距离作为函数或可调用的proc。这样,您就可以根据文章与搜索字词的匹配程度对文章进行排名。 SQL中Levenshtein距离的一个例子是:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=66781。
您在请求搜索时执行的存储过程中使用该算法。存储过程将比较搜索项与每个标题和文章,并按最接近的匹配顺序排列结果,对于完全匹配,结果为1。
在SQL之外,还有许多可用于API级别的高级文本分析包。我已经使用了Python的Jellyfish和NLTK库,效果很好。
另一个选择是使用Apache Solr(http://lucene.apache.org/solr/features.html)或Elastic Search之类的东西,它提供了一个随时可用的API,用于跨文档和数据进行全文搜索。这会增加您的架构的复杂性。