繁体   English   中英

mySQL LIKE / MATCH返回更准确的搜索结果

[英]mySQL LIKE / MATCH to return more accurate search results

我正在尝试为网站上的新闻栏目建立更准确的搜索功能。 我曾经在内容区域上使用LIKE,但是,我的问题是当我在数据库中将其写为“三字搜索”时搜索“三搜索”时,它不返回任何内容。

建议我使用MATCH,但无法返回任何结果。 我的查询从多个表返回各种字段。 我的搜索区域有多个搜索块,可以根据需要进行更改,但是无论结果是否得分低,我都需要它返回所有结果。

这是我的SQL:

$sql = "SELECT news.id, news.name, news.date, news_categories.name as catName, news.author, statuses.name as statusName, MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AS score FROM news, news_categories, statuses WHERE news.name LIKE '%".$name."%' AND MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AND news_categories.id LIKE '%".$category."%' AND news.status_id LIKE '%".$status."%' AND news.status_id=statuses.id AND news.category_id=news_categories.id";

全文在这里并没有太大帮助,因为我的要求是始终获取这些值。 对我来说,一种更简单有效的方法是对包含搜索项的变量进行str_replace并将所有“”替换为%,以便该项有效地为“%three%word%search%”

您必须在要搜索的字段上创建FULLTEXT索引。 例如:

ALTER TABLE news
  ADD FULLTEXT(name, summary, content, keywords);

现在,您可以在查询的MATCH() ... AGAINST子句中使用这些字段。 阅读全文搜索的MySQL文档以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM