为了简化我的问题,可以说我有一张有很多书籍和各自内容的表格。另一方面,我有一个关键字表。我想找到匹配的对。请看下面的简单Perl脚本,它很好地说明了这个问题。如何匹配两个数据库表中的相关值?
#title => content
%books = (
"Foodworld" => "Cheesburgers and Hamburgers are the best you can ...",
"Marvelous Salad" => "Russian dressing is superb when ...",
"Delicious Steaks" => "Only BBQ RipEye"
);
#id => keyword
%keywords = (
"1234" => "Cheeseburgers",
"2345" => "dressing",
"9789" => "Hamburgers"
);
while (my ($title,$content) = each %books) {
while (my ($keywordID, $keyword) = each %keywords) {
if ($content =~ /$keyword/) {
print "$title \t $keywordID \n";
}
}
}
输出将是:
Marvelous Salad 2345
Foodworld 1234
Foodworld 9789
我的问题是,藏书包含〜70000个标题和关键词〜30,000字的列表。两者都在MySQL服务器上的单独表中。有什么建议么?你将如何解决这个任务?你能指点我一个好的方向吗?
我认为你是在正确的轨道上。这个“预先计算好的指数”的最终目标是什么? “图书”和“关键字”表的更改频率如何? – mwp 2015-02-24 21:16:04
你是说你的'books'表只有'title'和'book'作为列,而''keywords'表有'id'和'keyword'?这听起来像有人只做了一半的数据库设计。 'books'表集会还需要一个'id'列,以保存标题字符串的索引,并且需要一个包含'book_title'和'keyword_id'作为外键的联结表'keywords_by_book',并且定义关键字出现在每本书中。该表需要一段时间才能生成,但一旦完成,查找速度将比纯Perl中可以写入的任何时间都快。 – Borodin 2015-02-24 22:46:16
不,当然有一个'books.id'和一些更多的列,但这会让我的问题更加复杂 – 2015-02-26 15:08:49