Database design 正确的数据库/方法,使用多种可能的;关键词;匹配每个记录

Database design 正确的数据库/方法,使用多种可能的;关键词;匹配每个记录,database-design,associations,keyword,Database Design,Associations,Keyword,我的rails 3应用程序是在Heroku托管的,它使用postgres进行普通的数据库工作,比如跟踪消息和用户。我100%的经验是使用普通关系数据库和SQL 然而,现在我添加了一个新方法“按关键字查找产品”,它可以访问与应用程序其余部分无关的数据集,因此可以在另一个框架或数据库中实现。我想知道MongoDB或其他类型的数据库是否是实现这一功能的方法 我们的目标是在5000种产品类型(“螺丝刀”、“开瓶器”等)中找到一种最符合500000个关键字和短语列表的。例如,可能有10-20个单词或短语匹

我的rails 3应用程序是在Heroku托管的,它使用postgres进行普通的数据库工作,比如跟踪消息和用户。我100%的经验是使用普通关系数据库和SQL

然而,现在我添加了一个新方法“按关键字查找产品”,它可以访问与应用程序其余部分无关的数据集,因此可以在另一个框架或数据库中实现。我想知道MongoDB或其他类型的数据库是否是实现这一功能的方法

我们的目标是在5000种产品类型(“螺丝刀”、“开瓶器”等)中找到一种最符合500000个关键字和短语列表的。例如,可能有10-20个单词或短语匹配并返回“螺丝刀”(“飞利浦螺丝刀”“平头螺丝刀”等)

我怀疑有某种聪明的设计,可能是围绕一个与MySQL、Postgres等非常不同的专门数据库构建的,该数据库针对某种“关联”而不是关系信息结构进行了优化


任何指针都将不胜感激……

您所看到的是一个能够高效处理文本索引的数据库?我不确定无sql数据库如何帮助您解决此问题。甲骨文是从甲骨文9引入的。(我想)我用它来解决类似于你的问题,它的表现令人钦佩


如果您正在寻找与数据库供应商无关的解决方案,那么我建议您检查一下我们的数据库,它使用了下面强大的lucene索引,并提供了一个非常可行的抽象层。

不,不是在寻找一个在索引方面做得更好的数据库。。。寻找一个数据库和/或结构,该数据库和/或结构根据与记录相关联的关键字进行查找……花园式关系数据库的“明显”方法是两个表:关键字(字段“a_关键字”和外键“product_id”)和产品(字段“id”、“product_名称”等)因此,如果我们在关键字中找到一个关键字,那么我们就有了产品id,因此可以查找产品。对于精确匹配来说非常简单。但我突然想到,可能有一些不同的数据库和/或结构可以很好地处理“模糊”关联。可能是我不清楚您的问题,但我相信我的解决方案仍然有效。可能不同的是,您正在寻找一种新的方法来设计解决方案,我只是建议一种实现。假设我们使用Hibernate搜索,我可以在关键字列上运行“文本出现”查询。因为它在下面使用lucene,所以搜索结果会很快。然后我们可以使用Hibernate将搜索结果映射到实际的项目实体。(hibernate负责将lucene索引映射到表的主键列。因此lucene搜索结果映射到实体)一个工作示例。通配符、模糊、邻近搜索、术语索引和权重是lucene提供给您的现成功能。