我正在开发一个Web应用程序,需要一些查询帮助。我正在使用全文,这就是它的样子:
SELECT id, name, city, state, country, date
FROM events_search
WHERE MATCH(name, city, state, country)
AGAINST ('$str')
正如您所看到的,我正在使用包含名称,城市,州和国家/地区的索引,并将其与用户输入的字符串相匹配。该字符串可以包含我刚才提到的字段的任意组合。所以我需要查询数据库,找到最相关的结果,然后将它们显示给用户。到目前为止它工作得很好但并不完美。
例如:如果用户进入迈阿密佛罗里达州,前5个结果在迈阿密和佛罗里达州的其他城市。接下来的5场比赛将在亚利桑那州迈阿密举行(我不想展示这一场),之后我将获得更多在佛罗里达和迈阿密(佛罗里达州)的成绩。所以我想要做的是确定已经找到更多次的字段并显示具有此字段的结果。在这种情况下,它将成为佛罗里达州,因为70%的结果都是佛罗里达州的州。
答案 0 :(得分:0)
在SELECT
子句中包含您的全文搜索,您将得到一个分数,MySQL认为它的相关性。
SELECT
id,
name,
city,
state,
country,
date,
MATCH(name, city, state, country) AGAINST ('$str') AS relevancy
FROM
events_search
WHERE
MATCH(name, city, state, country) AGAINST ('$str')
ORDER BY relevancy DESC
这不会使查询变慢,优化器会检查它是相同搜索条件的两倍。
使用ORDER BY
条款,您的“迈阿密亚利桑那号”应该晚于“迈阿密(佛罗里达州)”出现。