我正在创建一个后端使用MySQL和Ruby gem Sinatra的网站。
我的MySQL表格中有一个LONGTEXT
列,其中包含FULLTEXT
索引。
我写了一个基本上是这样的MySQL查询:
SELECT Plot
FROM myTable
WHERE MATCH(Plot) AGAINST('time travel robot')
第一个结果:
Man on the Moon is a biographical movie on the late comedian Andy Kaufman. Kaufman, along with his role on Taxi (1978), was famous for being the self-declared Intergender Wrestling Champion of the world. After beating women time and time again, Jerry Lawler (who plays himself in the movie), a professional wrestler, got tired of seeing all of this and decided to challenge Kaufman to a match. In most of the matches the two had, Lawler prevailed with the piledriver, which is a move by spiking an opponent head-first into the mat. One of the most famous moments in this feud was in the early 80s when Kaufman threw coffee on Lawler on Late Night with David Letterman (1982), got into fisticuffs with Lawler, and proceeded to sue NBC.
即使我喜欢这部电影,也与时间旅行或机器人无关。
我不知道谷歌的搜索算法,但我想知道MySQL是否有一个搜索功能,根据输入的单词的接近程度对结果进行排名。
就我而言,我希望最相关的结果是将“时间”,“旅行”和“机器人”尽可能地放在一起。
如果我的梦想功能也可以改变单词,例如“旅行”或“机器人”,那将是很好的。
MySQL有多少可能实现?还是用Ruby?
或者我应该选择完全不同的东西?
答案 0 :(得分:1)
Google通过使用solr(lucene)对大型n-gram数据执行索引来进行搜索。 see
将mysql与ruby一起使用你可以做到,但是对于大数据来说肯定不会那么快和有效。但对于小数据,您会很高兴看到结果。
database index
是一种数据结构,它以额外的写入和存储空间为代价提高数据库表上的数据检索操作的速度,以维护索引数据结构。见indexing
有各种数据结构技术用于此索引目的。那些你也可以用ruby申请mysql。要获得基本想法,请查看此tutorial
因此,如果您拥有大量数据集,那么就会对该数据执行一些索引技术,现在当您在查询的索引数据上搜索time travel robot
时,它会自动显示最相关的结果。