我有一个有两列的表:ID
(主键,自动递增)和keyword
(文本,全文索引)。
在keyword
列中输入的值包括:
关键字
假设我们将以下句子作为输入:
"Find sports car sales statistics in Manhattan."
我正在寻找(我已经搜索了很长一段时间)寻找一个MySQL查询或一个算法,它接受给定的输入,并检测keywords
列中使用的关键字,结果是:
换句话说,我试图以句子的形式输入,然后匹配数据库中在句子中找到的所有现有(和最相关的)关键字值。请注意,这些关键字可以是由空格分隔的单词组成的短语。在
经过研究,我知道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
如果我们假设您在列表中以python方式为此类任务提供列,那么可以使用
set.intersection
来获得两个集合之间的交集(第二个元素可以是另一个iterable,如list或tuple):在您的例子中,您可以将查询结果放在
set
中,或者将其转换为set
。在注意:如果列为小写,以下集合理解将转换元素:
^{pr2}$但是这个方法将找到列与拆分字符串之间的交集,并使用空格。所以结果是:
作为另一种使用
re.search
的方法:作为一种简单的方法,您可以使用以下函数来获取短语的组合:
请注意,此功能可能更高效、更完整。在
相关问题 更多 >
编程相关推荐