2012-11-08 31 views
0

我将在每条记录中处理10,000-50,000条记录,其中包含大约200-400个字符的批处理。我预计我可能拥有的搜索字词数量不会超过1500个(全部与当地企业有关)。使用Ruby解析具有数百个标签的结构化和半结构化文本

我想创建一个函数,将结构化标记与术语列表进行比较以标记数据。

这些条款是基于业务描述。因此,例如,[Jazz Bar],[Nightclub],[Sports Bar][Wine Bar]都将对应[Bar]的查询。

通常这个数据有一些现有的标签,所以我也可以为第一遍创建一个严格的层次结构,然后在没有明确的现有标签的情况下再做一次。

什么是最具性能敏感的方式来实现这个?我可以有一张包含所有关键字的表格,并尝试将它们与每一条数据进行匹配。在我与现有标签相匹配的情况下,这很简单,在处理自由文本时不太直截了当。

我使用的Heroku/PostgreSQL的

+0

你想要查询/工作发生在哪里?在PostgreSQL或你的Ruby代码?这是一项一次性工作,还是一项常规工作?而且,当你识别标签时你想做什么?算命中?用其他东西替换它们? –

+0

这是每天/每周的作业缓存某些数据和元数据。我们有一个基于标签的查询机制,因此我们会为我们缓存的记录添加一个标签,并保持标签项目的总数。有8个顶级标签,每个标签有2-8个叶子标签。谢谢! – SFRubyNewby

+0

不知道这是否适合您的情况,但看看Redis和Elasticsearch。 –

回答

0

这是一个相当安全的赌注使用Sphinx搜索引擎和ThinkingSphinx红宝石的宝石。是的,有一些配置开销,但我还没有找到Sphinx让我失败的场景。 :-)

如果你有30-60分钟的时间来修改这个设置,试试看。我一直在使用狮身人面像搜索一个拥有600,000多条记录和复杂查询的数据库表(3个单独的搜索条件+ 2个独立的字段分组/排序),并且我在0.625秒内获得了结果,这并不差,我确信比使用纯Ruby代码可以完成的任何事情都要好得多。