【问题标题】:Thinking Sphinx - Already have a search method in the model?Thinking Sphinx - 模型中已有搜索方法?
【发布时间】:2011-09-21 16:37:21
【问题描述】:

我想使用 Thinking Sphinx,但我一直遇到问题,因为我有一个非常大的 rails 项目,而且我的许多模型都使用了搜索方法。这些已经存在的搜索方法与 Thinking Sphinx 的搜索方法相冲突。有没有办法解决这个问题?

我说的是数千行代码,如果我必须将搜索方法更改为其他方法,我将不得不更改。不过,我似乎也找不到改变 Thinking Sphinx 中默认搜索方法的方法。

谢谢。

【问题讨论】:

    标签: ruby-on-rails search thinking-sphinx


    【解决方案1】:

    刚刚在 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,更改方法名称,并使用您的版本而不是规范版本。

    【讨论】:

    • 谢谢帕特。你提到的另一个人是我的前任老板,当时我正在和他一起工作。我们认为我们会走两条不同的道路,看看我们发现了什么。没想到两个论坛上的回答都是同一个人。 :)
    • 我们发现我们有一个没有 define_index 块的模型。这个模型有一个 self.search 方法,现在不起作用。即使没有 define_index 块,显然 TS 正在添加一个覆盖我们的 self.search 类方法。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多