我想看看是否有更好的表现方式找到一个字符串中的单词的完全匹配。 我正在查找字段'标题'的数据库表中的单词。 记录数量差别很大,我看到的表现非常可怕。红宝石 - 正则表达式的性能
以下是我对结果进行基准测试的3种方法。
title.split.include(search_string)
/\b#{search_string }\b/ =~ title
title.include?(search_string)
最好的性能是title.include?(search_string)
不去做一个确切的词搜索(和我在寻找一个确切的词搜索)
def do_benchmark(search_results, search_string)
n=1000
Benchmark.bm do |x|
x.report("\b word search \b:") {
n.times {
search_results.each {|search_result|
title = search_result.title
/\b#{search_string}\b/ =~ title
}
}
}
end
Benchmark.bm do |x|
search_string = search.search_string
x.report("split.include? search:") {
n.times {
search_results.each {|search_result|
title = search_result.title
title.split.include?(search_string)
}
}
}
end
Benchmark.bm do |x|
search_string = search.search_string
x.report("string include? search:") {
n.times {
search_results.each {|search_result|
title = search_result.title
title.include?(search_string)
}
}
}
end
"processing: 6234 records"
"Looking for term: red ferrari"
user system total real
word search: 50.380000 2.600000 52.980000 (57.019927)
user system total real
split.include? search: 54.600000 0.260000 54.860000 (57.854837)
user system total real
string include? search: 21.600000 0.060000 21.660000 (21.949715)
有什么办法,我可以得到更好的性能和精确字符串匹配结果?
感谢马克的指针。我正在做一个快速而肮脏的黑客攻击,但显然在压力下站立得不好。我会查看你发布的链接。 – truthSeekr 2011-03-12 16:47:15