我有一个表,它有两列:(ID
主键,自动增量)和keyword
(文本,全文索引)。在该keyword
列中输入的值包括:关键字
- 车
- 汽车销售
- 汽车
- 跑车
- 运动足
- 车吧
- 统计数据
假设我们有这个句子作为输入:
"Find sports car sales statistics in Manhattan."
我正在寻找(并且我已经搜索了很长时间)找到一个 MySQL 查询或一个接受给定输入的算法,并检测从keywords
列中使用的关键字,从而产生以下输出:
"Sports cars", "Car sales", "Statistics"
换句话说,我试图以句子的形式输入,然后匹配数据库中在句子中找到的所有现有(和最相关的)关键字值。请注意,这些关键字可能是由空格分隔的单词组成的短语。
经过研究,我了解到 MySQL 通过其全文搜索功能做了类似的工作。我已经尝试了所有自然语言、布尔值和查询扩展选项,但它们包含的关键字记录只有一半的内容与输入匹配。例如,它输出:
"Car", "Car sales", "Sports cars", "Sports foo", "Cars bar", "Statistics".
我不希望这种情况发生,因为它包含甚至不在输入中的单词(即 foo 和 bar)。
这是上述搜索的 MySQL 查询:
SELECT * FROM tags WHERE MATCH(keyword) AGAINST('Find sports car sales statistics in Manhattan.' IN BOOLEAN MODE)
我也试图提高相关性,但这个只返回一条记录:
SELECT *, SUM(MATCH(keyword) AGAINST('Find sports car sales statistics in Manhattan.' IN BOOLEAN MODE)) as score FROM tags WHERE MATCH(keyword) AGAINST('Find sports car sales statistics in Manhattan.' IN BOOLEAN MODE) ORDER BY score DESC