ThinkingSphinx :: OutOfBoundsError配置混淆

时间:2018-06-13 07:27:52

标签: thinking-sphinx

由于误解了正确的配置语法(也可能是遗留语法的副产品)而导致出现OutOfBoundsError。

manual建议使用WillPaginate样式参数进行类搜索。有许多字段可供绘制,模型定义为

class AziendaSearch < BaseSearch
  set_per_page 10000
  accept :terms
end

set_per_page处于较高级别,因为如果我将其设置为100的目标,则will_paginate链接不会显示。

控制器可能过度卷曲以包含排序参数,因此导致两步过程:

@azienda_search = AziendaSearch.new params
@results = @azienda_search.search
@aziendas = Azienda.order('province_id ASC').where('id IN (?)', @results).paginate :page => params[:page], :per_page => 100

视图基于@aziendas分页:

<%= will_paginate @aziendas, :previous_label => "precedente ", :next_label => " successiva" %>

我怀疑搜索模型没有正确设置,但鉴于手册的指示,语法对我来说并不明显。 page params[:page]当然不起作用......

更新 BaseSearchSphinx method,实际上是继承自此应用程序的旧版本(rails2.x ...)。因此,这可能会产生各种语法混淆。

事实上,按照手册,我现在完全不确定如何最好地做出这些陈述。是否应为AziendaSearch定义单独的类?如果没有,那么在控制器中调用Azienda.search块的位置应该在哪里?

@azienda_search = Azienda.search(
  :max_matches => 100_000,
  :page        => params[:page],
  :per_page    => 100,
  :order       => "province_id ASC"
  )
@results = @azienda_search.search

1 个答案:

答案 0 :(得分:1)

我不确定BaseSearchset_per_page做了什么(当然不是思科Sphinx方法),但值得注意的是Sphinx最多默认为1000条记录。 It is possible to configure Sphinx to return more,但您需要将config/thinking_sphinx.yml中的max_matches设置为首选限制(每个环境):

production:
  max_matches: 100000

并设置相关搜索请求的限制:

Azienda.search(
  :max_matches => 100_000,
  :page        => params[:page],
  :per_page    => 100
)

对于加倍的查询...如果您在索引定义中添加province_id作为属性,则您将能够order search queries

# in your Azienda index definition:
has province_id

# And then when searching:
Azienda.search(
  params[:azienda_search][:terms],
  :max_matches => 100_000,
  :page        => params[:page],
  :per_page    => 100,
  :order       => "province_id ASC"
)