我正在尝试为我的网站上的新闻部分构建更准确的搜索功能。我在内容区域使用LIKE,但是,我的问题是,当我在数据库中搜索“三个搜索”时,它被写为“三字搜索”,它不会返回任何内容。
我被建议使用MATCH,但我无法用它返回任何结果。我的查询返回多个表中的各种字段。我的搜索区域有超过1个搜索块,如果需要我可以更改,但我需要它来返回所有结果,无论它们是否得分较低。
这是我的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";
答案 0 :(得分:0)
您必须在要搜索的字段上创建FULLTEXT
索引。例如:
ALTER TABLE news
ADD FULLTEXT(name, summary, content, keywords);
现在,您可以在查询的MATCH() ... AGAINST
子句中使用这些字段。阅读全文搜索MySQL documentation以获取更多信息。
答案 1 :(得分:0)
Fulltext在这里没有太大帮助,因为我的要求是始终获取值。对我来说,一种更简单,更有效的方法是对包含搜索词的变量执行str_replace,并将所有“”替换为%,以便该词有效地为“%three%word%search%”