如何创建一个高效的MySQL数据库来自动完成Google等请求

时间:2010-10-05 06:01:02

标签: mysql database-design full-text-search search-engine relational-database

我想了解一下如何创建一个高效的MySQL数据库,可以处理像Google新的自动SERP更新功能这样的高流量自动完成请求。

关键是,我试图获取我的书的内容,并且我想以一种方式索引文本,使得数据库以最快/最小的开销可能请求相关文本。

例如:
如果我要输入文字:“as”,我基本上会搜索数据库(整本书)并查看书中句子的结果集:

"...that is as I was saying..."  
"as I intended..."  
"This is as good as it gets"  
...  

但是只要我键入“k”并且拼写“ask”,结果集就会更改为(即):

"Ask your father..."  
"...I will ask you to do this."  
...  

另外,我正在考虑添加帮助词,所以如果您正在键入“askew”,但目前只有“ask”拼写,数据库会抓住包含“ask”的所有单词,你会看到帮助词,如“ask”,“askew”,“ask”,“ask”

重要的是,这本书是一本规则书,所以每本规则都有自己独特的关键词。因此,当一个人键入单词或2时,具有该单词组合的所有规则将显示在结果集中。

我愿意做任何研究,而不是任何人选择给予的确切帮助。对于我应该在这样一个主题中寻找的关键词,我感到很茫然 - 所以除了具体的解决方案之外,这种类型的数据库结构的关键词也会受到赞赏和帮助。

我读过有关全文搜索的内容?这可能是一个解决方案,还是对我的目的来说效率不高?

我知道如何进行ajax调用和自动完成...这不是我要求解决的问题。我需要的是理解如何构建和索引数据库,这样当我编写脚本以文本格式解析我的书的内容,并将令牌插入数据库时​​,它将在以后以最有效的方式拉出。我预计网站上最终会有高流量,因此最小化请求开销至关重要。

在初始状态下,我正在考虑每个字符长度大于1的表格...因此我会有一个名为“two_letters”,“three_letters”等的表格。

“two_letter”数据库中的一个示例记录可以是“as”,并且它与书中包含“as”的每个规则都有多对多的关系......因此:

"as", "125"   
"as", "2024"  
"as", "4"  

当然,字母集越小,数据库就越大。这本书非常大,所以我们在这里谈论数百万条记录!每个2字母组合一个,以及与之相关的规则。然后,用3个字母的组合重新做一遍,直到没有更多的单词。这只是最初的头脑风暴尝试,可能是一个可怕的想法,但这是我的第一个想法。

运行脚本后,数据库将创建表并按原样插入记录。对于每个字符长度,它可能会多次读取内容。

我希望它能够识别多字组合,正如Google中的关键短语将在SERP中自动更新一样。因此,当用户输入“他们去”时,您可能会发现:

"they are gone already..."  
"they are going to the movies later."  
"how they are gonna get there is..."  

我基本上要求Google提供完全自动完成的功能,但内容是一本书,而不是互联网上的索引网站。

我期待听到那里的一些天才能够得到我在这里要求的东西,感觉给某些人留下了深刻的印象! :)

先谢谢大家。

2 个答案:

答案 0 :(得分:1)

我必须推荐Sphinx。对于存储在mysql(或其他数据库)中的数据,它是一个了不起的搜索引擎。

答案 1 :(得分:0)

我是第二个狮身人面像 - 我认为Craigslist使用它