0

我试图让 STI 从几个小时开始就使用轮胎/mongoid。我希望有一个人可以帮助我。

我有两个具有不同索引的模型。应该可以通过 Event.search 搜索两个索引,但也可以使用 CoursePlan.search 仅搜索适当的索引。

第一个模型:事件

# encoding: utf-8
class Event
  include Mongoid::Document
  include Mongoid::Timestamps
  include Tire::Model::Search
  include Tire::Model::Callbacks

  # rest of class omitted...

  # Elasticsearch
  index_name  "events" # Indexname /initializers/tire.rb
  mapping do
    indexes :_id, :index => :not_analyzed
    indexes :title
    indexes :place
    indexes :description
    indexes :fill_out
    indexes :current_user_keyword, analyzer: "keyword"
  end

第二种模式:课程计划

# encoding: utf-8
class CoursePlan < Event
  include Mongoid::Document
  include Mongoid::Timestamps
  include Tire::Model::Search
  include Tire::Model::Callbacks
  include TimeHelper

  # rest of class omitted...

  # Elasticsearch
  index_name  "course_plans"
  tire.index.add_alias "events"
  mapping do
    indexes :_id, :index => :not_analyzed
    indexes :title
    indexes :place
    indexes :description
    indexes :fill_out
    indexes :user_email
    indexes :course_title
    indexes :course_area
    indexes :course_user_email
    indexes :date
  end

我已经尝试过richarddong 的解决方案,请参阅轮胎问题#178。但这似乎只在某些情况下有效。

这个问题有可行的解决方案吗?也许我只是搞错了。

感谢您的时间。

4

1 回答 1

0

请检查这个答案,

使用 Tire 和 ElasticSearch 搜索多个模型

     def browse
        @search_items = Tire.search(['posts_index', 'channels_index'],{load: true}) do |search|
          search.query do |q|
            q.string params[:query], default_operator: "AND" if params[:query].present? 
          end
          search.sort { by :created_at, "desc" } if params[:query].blank?
        end
        @results = @search_items.results
      end
于 2013-09-28T13:51:59.857 回答