ruby - 最佳实践 : Text-search in Ruby, 还是让 MongoDB 来做这项工作?

标签 ruby mongodb

我有一个关键字数组,其长度可以是可变的。对于此示例,假设有 50 个:

keywords = ['dog','cat','monkey'...'bird']

我有一个句子数组(同样是可变长度),我想循环遍历,搜索每个关键字。

sentences = [ ['My dog ate cat food'], ['I went to the store.'], ... ]

如果句子包含任何关键字,那么我会将其移动到新的“匹配”数组。所以在 Ruby 中,我的代码看起来像这样:

sentences.each do |sentence|
  keywords.each do |keyword|
    if sentence.match(/\b#{keyword}\b/i)
      matched << sentence
    end
  end
end

这需要相当长的时间,而且看起来效率很低——尤其是当我有一个很大的关键字列表和一个很大的句子列表时。我是第一个承认我的 Ruby 开发还不是那么出色的人——有没有更简单、更有效的方法来做到这一点?

我使用 MongoDB 来存储关键字和句子。如果有更好的使用数据库的方法,我很乐意探索。

最佳答案

我以前没有使用过 MonogDB,但是你可以稍微优化你的 ruby​​ 代码。由于您只关心句子中是否有 any 关键字匹配,因此我会将逻辑插入 Ruby 正则表达式引擎:

regexp = keywords.map { |keyword| Regexp.quote(keyword) }.join('|')

matched = sentences.select do |sentence|
  sentence[0].match(/\\b(?:#{regexp})\\b/i)
end

它的作用是创建一个组合所有关键字的正则表达式。这样你就只循环句子而不是每个关键字。

关于ruby - 最佳实践 : Text-search in Ruby, 还是让 MongoDB 来做这项工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10437886/

相关文章:

ruby-on-rails - 在 Rails 中实现大型 2D 查找表的最佳方式

ruby-on-rails - Ruby-如何通过条件最大的多个键检索数组组中的总和

java - 使用 mongo-java-driver 在 Matlab 中进行高级 mongoDB 查询

ruby-on-rails - 使用远程 JSON 数据每 30 秒更新一次 MongoDB?

mongodb - 聚合 $accumulator + $project

ruby-on-rails - 将 Rails 中的主键更改为字符串

ruby - Ruby 中 Math Power (**) 的反面是什么?

ruby-on-rails - Rails group_by 显示多次

node.js - Mongodb多文档插入忽略自定义重复字段报错

javascript - Mongoose - 如何更新 MongoDB 数组中的所有对象?