Мышление Сфинкса - Уже есть метод поиска в модели? - PullRequest
1 голос
/ 24 июня 2011

Я бы хотел использовать Thinking Sphinx, но у меня продолжают возникать проблемы, потому что у меня очень большой проект рельсов, и метод поиска используется во многих моих моделях.Эти уже существующие методы поиска конфликтуют с методом поиска Thinking Sphinx.Есть ли способ обойти это?

Я говорю о тысячах строк кода, которые мне пришлось бы изменить, если бы мне пришлось изменить свой метод поиска на что-то другое.Кажется, я не могу найти способ изменить метод поиска по умолчанию в Thinking Sphinx.

Спасибо.

1 Ответ

3 голосов
/ 24 июня 2011

Только что ответил на это в списке TS, но с удовольствием отвечу и здесь:)

Нет встроенного способа сделать это, но теоретически это может быть возможно. Во-первых, Thinking Sphinx добавляет метод поиска на уровне класса при вызове define_index для модели, поэтому, если после этого вы определите свой собственный метод поиска, он перезапишет версию Thinking Sphinx.

Это означает, что вы можете просто определить новый метод, который делает то же самое - вот код для Model.search:

def self.search(*args)
  ThinkingSphinx::Search.new *search_options(args)
end

Который вы могли бы легко переименовать в другое:

def self.sphinx_search(*args)
  ThinkingSphinx::Search.new *search_options(args)
end

Единственный возможный улов этого заключается в том, что Thinking Sphinx может иметь внутренние ожидания в отношении существующего метода поиска и вести себя как обычно. Я не уверен - но попробуй и посмотри, как у тебя получится!

Обновление

Как оказалось, вышеупомянутое предложение не охватывает все ситуации и все еще содержит ошибки. Итак, я думаю, что запасное решение состоит в том, чтобы раскошелиться на Thinking Sphinx, изменить имена методов и использовать свою версию вместо канонической.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...