我想了解一下如何创建一个高效的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提供完全自动完成的功能,但内容是一本书,而不是互联网上的索引网站。
我期待听到那里的一些天才能够得到我在这里要求的东西,感觉给某些人留下了深刻的印象! :)
先谢谢大家。
答案 0 :(得分:1)
我必须推荐Sphinx。对于存储在mysql(或其他数据库)中的数据,它是一个了不起的搜索引擎。
答案 1 :(得分:0)
我是第二个狮身人面像 - 我认为Craigslist使用它