установки:ThinkingSphinx group_by вызывает медленные поисковые запросы
- Rails 4
- MySQL
- ThinkingSphinx
У меня есть модель (Record
) в мое приложение с почти 500 миллионов строк. Эта модель имеет 32 поля, но только две, которые мне интересны для определенного поиска Sphinx: name
и token
. name
- это то, что я ищу против использования Sphinx, и token
- это то, что я хочу вернуть для выполнения других действий в Rails.
Моих индексов Настроенные:
ThinkingSphinx::Index.define :records, :with => :real_time do
# fields
indexes name
indexes token
# attributes
has token, as: :token_attr, type: :string
# < several additional attributes >
end
То, что я хочу сделать, это запрос на Sphinx :records
согласования с name
и его возвращает различныхtoken
строки в массиве.
Вот что у меня есть:
Record.search("red", indices: %w(records), max_matches: num_tokens_i_need, group_by: :token_attr)
... где num_tokens_i_need
обычно где-то в тысячи (менее 10000)
выше запроса занимает от 5-8 минут. Однако, когда я просто сделать:
Record.search("red", indices: %w(records), max_matches: num_tokens_i_need).map(&:token).uniq
Поиск невероятно быстро (возвращение нескольких миллионов записей в течение нескольких сотен миллисекунд), но я не вернусь num_tokens_i_need
из-за .uniq
вызова.
В основном, что мне нужно сделать, это быстрый поиск Сфинкса, который возвращает мне точное количество различных токенов для данного термина (например, «красный»).
Если вы видите мой sphinx.conf или что-нибудь еще, пожалуйста, сообщите мне.
И если кто-то захочет объяснить, почему нисходящий, я был бы признателен. – CDub