python mysql 匹配字符串_Python 3.7中MySQL列最接近字符串匹配与性能差异的搜索

我在MySQL8数据库中有一个名为teams的表。我的目标是这个表和其他一些具有相同问题的表,给定一个包含一个或多个单词的字符串,并且假设我的字符串与记录中的任何其他字符串都不完全匹配,则执行一些模糊字符串匹配以获得最近的行。该表有两行,一行带有主键索引,另一行称为“names”。

虽然我的数据集可能有10000条记录,但在未来不太可能达到一个数量级。

我想了两种可能的方法。方法一,提取所有数据并进行模糊字符串匹配。方法二,使用全文索引并执行匹配。。。反对

第一条路

cursor=db.cursor(buffered=True)

equipo='Hapoel Tel Aviv'

a=timeit.default_timer()

cursor.execute('SELECT teamid,nombre FROM equipos')

listae=[a for a in cursor]

print('row 1 de la lista',listae[0])

b=timeit.default_timer()

lista2=[a[1] for a in listae]

c=timeit.default_timer()

sol=process.extractOne(equipo,lista2,scorer=fuzz.token_sort_ratio)

print('best match',sol)

d=timeit.default_timer()

cursor.execute('SELECT teamid,nombre FROM equipos WHERE nombre=%s',(sol[0],))

row=cursor.fetchall()

e=timeit.default_timer()

for row in listae:

if sol[0]==row[1]: break

print('id y equipo',row)

f=timeit.default_timer()

print(b-a,c-b,d-c,e-d,f-e)

>>>0.06649364937199209 0.0005017736623500468 0.37029168459135064 0.0006061482259838158 0.0003117132238372733

只是想弄清楚f和e之间,e和d之间是什么,但我想知道哪个更快。

方法二,根据互联网,我试着执行全文查询

cursor.execute('ALTER TABLE equipos ADD FULLTEXT(nombre)')

print('here')

cursor.execute('SELECT teamid,nombre FROM equipos WHERE MATCH(nombre) AGAINST ("{}" WITH QUERY EXPANSION)'.format(equipo))

res2=[a for a in cursor]

print('resultado de 2',res2)

cursor.execute('ALTER TABLE equipos DROP INDEX')

在这种情况下,终端要花很长时间来实现第一句话,无法完成它,所以我甚至不知道接下来会发生什么,以及如何工作。

我的问题是,为什么全文不起作用?一旦修好了,它会不会同样快速/准确?有没有比这两个更好的第三种选择呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值