Почему мой запрос sunspot_rails занимает так много времени?Что я должен сделать, чтобы ускорить это? - PullRequest
0 голосов
/ 28 ноября 2011

Я новичок в Solr / Sunspot, и я уверен, что сделал что-то не так.

У меня sunspot_rails 1.2.1 работает с rails 2.3.4 (пробовал другие версии, но они не будут работать, и мы надеемся не обновлять рельсы сейчас)

Reindex работал, и я получаю результаты, но поиск занимает слишком много времени. Около 25 секунд, чтобы выполнить полнотекстовый поиск по двум полям с почти 78 000 документов.

У меня есть это:

class Abstract < ActiveRecord::Base
  searchable do
    text :original_title, :headline
  end
end

Искать так:

Abstract.search do
  fulltext 'test'
  paginate :page => 1, :per_page => 30
end

Это единственная подсказка, которую я должен продолжить:

Выбор Solr (25275,2 мс) {: fq => ["type: Abstract"],: start => 0,: defType => "dismax",: q => "+ (test)",: fl = > "* Score",: rows>> 30,: qf => "original_title_text headline_text"}

Это не однократный первый поиск, это каждый раз.

Если я добавлю больше критериев (например, updated_at между двумя датами), это увеличится примерно до 8 минут!

Меня попросили отметить, что это в среде разработки.

Обновление

Проблема не в Solr. Если я посещу это:

http://localhost:8982/solr/select?indent=on&version=2.2&q=+%2B(test)&fq=type:Abstract&defType=dismax&start=0&rows=10&fl=*%2Cscore&qt=standard&wt=standard&explainOther=&hl.fl=&qf=original_title_text+headline_text

выполняет тот же запрос и занимает минимальное количество времени (что-то около 4 миллисекунд!)

Так почему же запрос через Rails занимает так много времени? это либо солнечное пятно, либо rsolr, либо, как предположил Джон, возможно, он запускает новый экземпляр Solr, но я не думаю, что это так.

Должен ли я попробовать переключиться на acts_as_solr? Я думал, что это немного устарело.

Я нахожусь на sunspot 1.2.1 и rsolr 0.12.1 - будут ли здесь помогать более новые версии?

Интересная новая информация

Переход на Rails 2.3.14 сократил время запроса до 18 секунд!

РЕЗУЛЬТАТ!

Я попробовал sunspot 1.3.0 с RSolr 1.0.6, и, наконец, я получил быстрый ответ, который искал! Это потребовало от меня перехода на стабильную версию рельсов 2.3. Жаль, мы не хотели обновлять версию rails, но, похоже, это было необходимо.

1 Ответ

1 голос
/ 28 ноября 2011

В Brightbox у нас есть около 36 миллионов документов, хранящихся в Solr в одном конкретном кластере. Мы храним и ищем документы с использованием Ruby (но не с помощью солнечного пятна). Мы храним документы с индексом, и это занимает около 36 гигабайт на диске.

Первый поиск после перезапуска solr может занять до минуты или более, но последующие поиски (даже очень разные) обычно занимают меньше половины секунды (даже поиск возвращает миллионы документов и сортирует их по значению другого поля). ).

Мы увеличили максимальный размер кучи памяти до 1 гигабайта (-Xmx1024m), и он обычно увеличивается почти мгновенно, но десятка довольно стабильна. Мы тщательно настроили схему для наших данных, но ничего особенного.

Что-то явно серьезно не так с вашей настройкой, чтобы он занимал так много времени каждый раз, имея всего 78 тыс. Документов.

Если не сообщать вам больше подробностей о том, что происходит, я бы предложил: сначала увеличьте максимальный размер кучи памяти - если он слишком низкий, то он будет каждый раз считывать индекс с диска и будет скорее всего, будет часто запускать сборщик мусора (который использует много процессора).

Во-вторых, убедитесь, что sunspot не делает ничего странного, например, запускает новый экземпляр solr при каждом поиске. Должен быть запущен демон solr.

В-третьих, если у вас все еще есть проблема, попробуйте позвонить, чтобы решить непосредственно с помощью curl или чего-то еще. попробуйте поочередно упростить запрос, чтобы увидеть, является ли одна его часть проблемой (может быть, потерять все, кроме defType и qf и начать добавлять его обратно оттуда).

...