最佳实践:使用Ruby进行文本搜索,还是让MongoDB来完成?

最佳实践:使用Ruby进行文本搜索,还是让MongoDB来完成?,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 |

我有一个关键字数组,可以有一个可变的长度。在本例中,假设有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
句子。每个do|句子|
关键字。每个do |关键字|
if语句.match(/\b{keyword}\b/i)

匹配我以前没有使用过MonogDB,但是您可以稍微优化一下ruby代码。因为您只关心句子中是否有任何关键字匹配,所以我会将逻辑推送到Ruby regexp引擎中:

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

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

它的作用是生成一个将所有关键字组合在一起的regexp。这样,你只需在句子上循环,而不是在每个关键字上循环。

你是在寻找文字匹配还是全文搜索?只是文字匹配。“猫”而不是“紧张”或“lolcat”。这很有效,我不得不做一些小的改变,但我认为这更好。非常感谢。以:
matched=句子结束。选择do |句子|句子[0]。匹配(/\b(?:{regexp})\b/i)结束
非常好!请接受答案,以便其他人也能找到它。祝你未来的发展好运!:)