2015-04-22 70 views
3

基本上我有3個模型(書籍,章節,作者),並且在索引章節時我想包括一些書籍和作者屬性。沒有索引的rails彈性搜索關係屬性

這裏是我的Chapter.rb

class Chapter < ActiveRecord::Base 
    belongs_to :book, :counter_cache => true 
    include Elasticsearch::Model 

    index_name [Rails.env, model_name.collection.gsub(/\//, '-')].join('_') 

    mappings do 
     indexes :id, type: :integer 
     indexes :title, type: :string 
     indexes :description, type: :string 
     indexes :content, type: :string 
     indexes :updated_at, type: :date # Date example 
     indexes :book_title 
     indexes :book_type 
     indexes :author_name 
     indexes :book_id 
    end 

    def book_title 
    book.title 
    end 
    def book_type 
    book.book_type 
    end 
    def author_name 
    " #{book.author.firstname} #{book.author.lastname} " 
    end 

    def to_indexed_json 
    to_json methods: [:book_title, :book_type, :author_name] 
    end 
end 

http://localhost:9200/development_chapters/_mapping?pretty顯示正確的映射

{ 
    "development_chapters" : { 
    "mappings" : { 
     "chapter" : { 
     "properties" : { 
      "author_name" : { 
      "type" : "string" 
      }, 
      "book_title" : { 
      "type" : "string" 
      },.... 
     } 
     } 
    } 
    } 
} 

那麼爲什麼我沒有得到AUTHOR_NAME,BOOK_TITLE等...在搜索結果中

<Elasticsearch::Model::Response::Result:0x00000105e393a0 @result=#<Hashie::Mash _id="415" _index="development_chapters" _score=1.0 _source=#<Hashie::Mash book_id=153 content="[\"Explicabo accusantium odit .\"]" created_at="2015-04-22T18:43:58.586Z" description="You can't generate the application without quantifying the cross-platform SDD bandwidth!" id=415 title="Future Communications Orchestrator" updated_at="2015-04-22T18:43:58.586Z"> _type="chapter">> 

回答

6

您正在定義錯誤的序列化方法。 Elasticsearch::Model搜索方法as_indexed_json,並且您正在定義to_indexed_json。在elasticesearch模型的寶石,你可以找到例子https://github.com/elastic/elasticsearch-rails/blob/master/elasticsearch-model/examples/activerecord_associations.rb#L82

它應該是這個樣子:從/用戶錯誤的參數數目(1 0) :

def as_indexed_json(options = {}) 
    as_json methods: [:book_title, :book_type, :author_name] 
end 
+0

改變了它,現在我得到這樣的:引發ArgumentError /mac/RubymineProjects/ESAA/app/models/chapter.rb:52:in'as_indexed_json' – Richardlonesteen

+1

'as_indexed_json'採取了一個選項散列,因此應該是'def as_indexed_json(options = {})' – Shadwell

+0

@Shadwell謝謝你的對,謝謝:) – edariedl