MySQL在VARCHAR列

时间:2015-07-07 17:12:07

标签: mysql node.js levenshtein-distance sentence-similarity

我有一个数据库表,用于存储餐馆名称及其所在的城市。例如:

  

名称|城市

     十一麦迪逊公园| NYC

     

gramercy酒馆| NYC

     

暹罗莲花| TOK

     

现代| LA

     

ABC Kitchen | LA

现在当INSERT之前有一个传入的条目时,如果同一个城市没有类似的餐馆名称,我想继续执行插入。

但是如果条目是这样的,比如{name:“Eleven Madison”,city:“NYC”},我想在同一个城市的“名称”栏中找到类似的条目,在这个例子中是“十一麦迪逊公园”在“NYC”中,我想插入并在“冲突”表中存储一个新行 - 这些餐馆的ID(最后插入ID和类似的行ID)

我使用Levenshtein distance算法,并使用以下SQL查询:

SELECT id, levenshtein_ratio(name, 'Eleven Madison') AS levsh from restaurants
where
city_name = 'NYC'
order by levsh asc
limit 0, 1

然后我将阈值设置为8,如果levsh小于8,则将其标记为冲突,即在“冲突”表中插入新记录。这个查询工作正常,直到表增长到1000条记录。现在这个查询需要2秒钟才能完成。

据我所知,这是因为我正在为该市的所有餐厅计算levenshtein_ratio - 而且我只需要在类似名称上应用比率函数。那些包含'Eleven','Madison',......甚至更好的是,如果我可以做像

这样的事情
WHERE city_name = 'NYC' AND SOUNDEX(any word in `name`) = SOUNDEX(any word in 'Eleven Madison')

请提供有关如何改进和优化此查询的建议,如果可能的话,请提供更好的方法来解决我的问题。

由于

0 个答案:

没有答案