ActiveRecord的Elasticsearch,Tire和Nested字段

时间:2013-01-18 20:07:59

标签: activerecord elasticsearch tire

请阅读Elasticsearch, Tire, and Nested queries / associations with ActiveRecord

下面的类似问题的答案

假设我在上面的问题中提供了Book模型的以下字段:

field :account_tags, type: Array # [{:account_id => 1, :tags => ["tag1", "tag2"], :acccount_id => 2, :tags => ["tag3", "tag4"] }]

我现在想设置一个索引来搜索这些account_id或标签。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题并且很直接。我的映射看起来像

mapping do 
  ...  
  indexes :account_tags do
    indexes :account_id, :index => "not_analyzed"
    indexes :tags, :type => 'string', :analyzer => 'keyword'
  end
end

我的to_indexed_json看起来像是

def to_indexed_json
  {
    ...
    account_tags: account_tags
  }.to_json
end

现在我可以通过

搜索
@query = "account_id:#{account_id}"
@tags = tags

Book.tire.search :load => true do |search|
  search.query do |query|
    query.string @query
  end

  search.filter :terms, :tags => @tags
end

这是我用来制作系统原型的裸机解决方案。