最佳实践:使用Ruby进行文本搜索,还是让MongoDB来完成?
我有一个关键字数组,可以有一个可变的长度。在本例中,假设有50个:最佳实践:使用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 |
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)结束
非常好!请接受答案,以便其他人也能找到它。祝你未来的发展好运!:)