Влияет ли что-либо из метода поиска внутри солнечного пятна / поиска? - PullRequest
3 голосов
/ 02 сентября 2011

Я сравнил 2 версии моего индекса Solr с первой следующей инструкцией include:

searchable(:auto_index => false, :auto_remove => true,
           :include => { :account => true,
           :user_practice_contact => [:city],
           :user_professional_detail => [:specialty, :subspecialties]}) do

Второй:

searchable(:auto_index => false, :auto_remove => true) do

Я ожидал увидеть скачок скорости в версии с включенными, но вот результат:

версия включает в себя:

Benchmark.measure { User.limit(50).each do |u|; u.index; end; Sunspot.commit; }
   => #<Benchmark::Tms:0x1130b34e8 @real=6.8079788684845, @utime=5.05, @cstime=0.0, @cutime=0.0, @total=5.2, @label="", @stime=0.149999999999999>

и без включает в себя:

Benchmark.measure { User.limit(50).each do |u|; u.index; end; Sunspot.commit; }
 => #<Benchmark::Tms:0x112ef0fe8 @real=6.82465195655823, @utime=4.92, @cstime=0.0, @cutime=0.0, @total=5.07, @label="", @stime=0.15> 

Кто-нибудь знает, должны ли работать включения? И если так, я делаю это неправильно? Я посмотрел на документы: http://outoftime.github.com/sunspot/rails/docs/ и не вижу упоминаний об этом.

Ответы [ 2 ]

3 голосов
/ 18 июня 2012

Согласно API , :include будет:

разрешать ActiveRecord загружать необходимые ассоциации при индексации.

Ваш тест не выполняетсяработать правильно, потому что вы индексируете отдельные записи в обычном итераторе Ruby.Поскольку вы индексируете одну запись 50 раз, Sunspot не сможет использовать загруженную загрузку вообще.Вместо этого вы должны сделать:

Sunspot.index( User.limit(50) );
Sunspot.commit

О, и вы могли бы проверить, является ли следующее быстрее, чем выше?Я действительно хочу знать.

Sunspot.index( User.includes(:account).limit(50) );
Sunspot.commit

Также есть ошибка , в настоящее время модели STI будут игнорировать :include.

1 голос
/ 03 мая 2012

Посмотрев SQL-запросы в журнале Rails, вы можете увидеть, что :include при поиске вызывает стремительную загрузку при индексации. :include on #search вызвал нетерпеливую загрузку при поиске.

...