Ошибка «Не удается добавить массив в BooleanQuery» с хорьком на рельсах - PullRequest
0 голосов
/ 25 октября 2008

Я пытаюсь заставить простую форму поиска работать на моем сайте RoR. У меня есть следующий код:

(в note_controller.rb)

  def search
    @results = Note.find_with_ferret(params[:term]).sort_by(&:ferret_rank)

    respond_to do |format|
      format.html
      format.xml { render :xml => @nootes }
    end
  end

(в note.rb)

class Note < ActiveRecord::Base
  acts_as_ferret :fields => [ :title, :body ]
end

(в index.html.erb)

<%= form_tag :action => 'search'%>
<%= text_field 'term', nil  %>
  <%= submit_tag 'Search' %>
</form>

(в search.html.erb)

<h1><%= pluralize(@results.size, 'result') %></h1>

<ul>
<% for result in @results %>
  <li><%= result.ferret_score %>: <%= link_to result.tile, result %></li>
<% end %>
</ul>

Как вы можете надеяться, из вышесказанного видно, что у меня есть модель, которую я рассказал act_as_ferret. Затем я получил поисковое действие в моем контроллере, которое пытается выполнить рендеринг в представление search.html.erb. У меня есть форма в представлении индекса, который выполняет поиск. Однако, когда я запускаю это, я получаю следующую ошибку:

Невозможно добавить массив в BooleanQuery

Полагаю, я что-то не так делаю с формой, так что хорек каким-то образом получает неверные данные. Является ли form_tag тем, что я сделал правильно? Любая помощь будет высоко ценится.

Обновление:

Ниже приведен единственный фрагмент, который я могу извлечь из журнала. Я использую Heroku, и он, кажется, не дает совершенно стандартных файлов журнала. Надеюсь, что это полезно.

Processing NotesController#search (for 152.78.202.74, 127.0.0.1 at 2008-10-25 07:32:23)
[POST] Session ID: BAh7BzoMY3NyZl9pZCIlZmEyMzcxZTdlYTUyODRkNzlmMzdjZWJlOGNlOGYz M2UiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhh c2h7AAY6CkB1c2VkewA=--450f51b45e38cba302e8ac6bd9b03c7ae79981e9
Parameters: {"commit"=>"Search", "term"=>["wheelbarrow"], "authenticity_token"=>"1879a835ded87e7a28861725ec668b690de6b7f5", "action"=>"search", "controller"=>"notes"}
configured index for class Note: {
    :index_dir=>"/mnt/home/userapps/38385/index/development/note",
    :mysql_fast_batches=>true, :name=>:note, :single_index=>false,
    :index_base_dir=>"/mnt/home/userapps/38385/index/development/note",
    :reindex_batch_size=>1000,
    :registered_models=>[Note(id: integer, title: string, body: text, created_at: datetime, updated_at: datetime)],
    :ferret=>{:dir=>#,
    :key=>[:id, :class_name],
    :or_default=>false,
    :handle_parse_errors=>true,
    :auto_flush=>true,
    :create_if_missing=>true,
    :path=>"/mnt/home/userapps/38385/index/development/note",
    :default_field=>[:title, :body],
    :analyzer=>#,
    :lock_retry_time=>2},
    :ferret_fields=>{:title=>{:via=>:title, :term_vector=>:with_positions_offsets, :boost=>1.0, :store=>:no, :highlight=>:yes, :index=>:yes},
    :body=>{:via=>:body, :term_vector=>:with_positions_offsets, :boost=>1.0, :store=>:no, :highlight=>:yes, :index=>:yes}},
    :fields=>[:title, :body],
    :raise_drb_errors=>false,
    :user_default_field=>nil,
    :enabled=>true}

ArgumentError (Cannot add Array to a BooleanQuery): /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:124:in `add_query'
    /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:124:in `scope_query_to_models'
    /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:102:in `find_ids'
    /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:85:in `find_id_model_arrays'
    /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:41:in `ar_find'
    /vendor/plugins/acts_as_ferret/lib/ferret_find_methods.rb:12:in `find_records'
    /vendor/plugins/acts_as_ferret/lib/acts_as_ferret.rb:342:in `find'
    /vendor/plugins/acts_as_ferret/lib/class_methods.rb:155:in `find_with_ferret'
    /app/controllers/notes_controller.rb:14:in `search'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `send'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in `perform_action_without_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:580:in `call_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:573:in `perform_action_without_benchmark'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue_without_timeout'
    /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue_without_timeout'
    /home/userapps_plugins/preload/request_timeout/lib/request_timeout.rb:9:in `perform_action_without_rescue'
    /usr/lib/ruby/1.8/timeout.rb:48:in `timeout'
    /home/userapps_plugins/preload/request_timeout/lib/request_timeout.rb:8:in `perform_action_without_rescue'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:201:in `perform_action_without_caching'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:13:in `perform_action'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/query_cache.rb:8:in `cache'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:12:in `perform_action'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `send'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in `process_without_filters'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in `process_without_session_management_support'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:389:in `process'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:149:in `handle_request'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:107:in `dispatch'
    /usr/lib/ruby/1.8/thread.rb:135:in `synchronize'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:120:in `dispatch_cgi'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:35:in `dispatch'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/rack/adapter/rails.rb:54:in `serve_rails'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/rack/adapter/rails.rb:74:in `call'
    /home/heroku_rack/lib/toolbar.rb:16:in `call'
    /usr/lib/ruby/gems/1.8/gems/rack-0.4.0/lib/rack/urlmap.rb:42:in `call'
    /usr/lib/ruby/gems/1.8/gems/rack-0.4.0/lib/rack/urlmap.rb:35:in `each'
    /usr/lib/ruby/gems/1.8/gems/rack-0.4.0/lib/rack/urlmap.rb:35:in `call'
    /usr/lib/ruby/gems/1.8/gems/rack-0.4.0/lib/rack/builder.rb:53:in `call'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/connection.rb:59:in `pre_process'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/connection.rb:50:in `process'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/connection.rb:35:in `receive_data'
    /usr/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:224:in `run_machine'
    /usr/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:224:in `run'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/backends/base.rb:45:in `start'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/server.rb:146:in `start'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/controllers/controller.rb:79:in `start'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/runner.rb:166:in `send'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/runner.rb:166:in `run_command'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/lib/thin/runner.rb:136:in `run!'
    /usr/lib/ruby/gems/1.8/gems/thin-0.8.2/bin/thin:6 /usr/bin/thin:19:in `load'
    /usr/bin/thin:19 Rendering /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/templates/res

Ответы [ 2 ]

1 голос
/ 25 октября 2008

Я не могу вспомнить, чтобы когда-либо видел эту ошибку хорька. Есть две основные диагностики: зайдите в скрипт / консоль и выполните

Notes.find_with_ferret("some term that should be in index") 

А затем посмотрите, что происходит, когда вы удаляете каталог индексов (/ appname / index / development), делаете ли другой find_with_ferret для принудительного переиндексации?

Справочная информация: столбцы "title" и "body" в таблице или рассчитанные по методу экземпляра, или дочерние элементы, например, из. имеет много? Если поля в таблице, какие типы столбцов объявлены в заголовке "title" и "body", и какие они типы столбцов mySQL?

Также обычно полезно включать ваши O / S, версии ruby, rails, ferret и a_a_f, которые вы используете.

0 голосов
/ 25 октября 2008

Я удалил каталог index, и он, кажется, обновился сам, но теперь мои поиски в консоли не дают результатов. До того, как я удалил каталог index, я получил результаты на консоли, но не при использовании из формы в моем приложении.

Заголовок и Тело - оба столбца в моей таблице MySQL. Они были созданы с использованием миграций Rails в виде строки типа и текста соответственно.

Я работаю на Heroku - поэтому я не совсем уверен, какая ОС (вероятно, linux) или версии, хотя я знаю, что это как минимум rails 2.1. Я также не могу найти номер версии для AAF - но я думаю, это относительно недавно.

Извините, я не могу больше помочь - чем я вам сказал?

Robin

...