【发布时间】:2011-07-14 00:40:26
【问题描述】:
我正在尝试查看是否有更好的方法来查找字符串中单词的完全匹配。 我正在我的数据库表中查找字段“标题”的单词。 记录的数量差异很大,我看到的性能非常可怕。
这是我对结果进行基准测试的 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)
有什么方法可以获得更好的性能和精确的字符串匹配结果?
【问题讨论】:
标签: ruby regex performance search full-text-search