Я пытаюсь выяснить, есть ли лучший способ найти точное совпадение для слова в строке.Я ищу слово в своей таблице базы данных для поля «заголовок».Количество записей варьируется в широких пределах, и производительность, которую я вижу, довольно страшная.
Вот 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)
Есть ли способ повысить производительность и точные результаты поиска по строке?