2016-04-25 13 views
0

私の検索は正常に動作しています。 しかし、私は "1"または "2"とタイプして "ルームメイト"または "サブレット"の結果を得なければなりません。 モデルには、category_idという整数の列があります。 モデルCategoryには文字列の列:nameがあります。Railsでelasticsearchを使用してcategory.nameを検索するにはどうすればよいですか?

したがって、私は1が「ルームメイト」と2は下記

を「転貸」であるさCATEGORY_IDてきたが、私の住宅のモデルである:私はfields: ['title^10', 'category_id']を修正することができますので、ユーザが「ルームメイト」を検索することができますどのように

class Housing < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, use: :slugged 
    include Elasticsearch::Model 
    include Elasticsearch::Model::Callbacks 

    belongs_to :user 
    belongs_to :category 

    validates :title, :presence => true 
    validates :category_id, :presence => true 
    validates :created_at, :presence => false 
    validates :user_email, :presence => true 
    validates :description, :presence => false 
    validates_length_of :title, :maximum => 30 

    def self.search(query) 
     __elasticsearch__.search(
     { 
      query: { 
      # multi_match: { 
      simple_query_string: { 
       query: query, 
       fields: ['title^10', 'category_id'] 
      } 
      } 
     } 
    ) 
    end 

end 

代わりにルームメイトの結果を得るために整数 "1"を検索する必要がありますか?

私はfields: ['title^10', 'category.name']を試しましたが、動作しませんでした。

答えて

0

fields: ['title^10', 'category.name']は、正しいマッピングが定義されていないと機能しません。 Elasticsearchはあなたの関連性を知らない。 ESはドキュメントストアであり、独自のドキュメントストアを使用してレコードを検索します。 ESに格納されているドキュメントにカテゴリ名を追加しない限り、検索することはできません。

TL;DR

マッピングを定義します。例:ここでは

mapping dynamic: 'strict' do 
    indexes :category do 
     indexes :name 
    end 
    indexes :title 
end 

カテゴリが今、あなたのインデックス内のネストされたオブジェクトとして保存され、したがって、これは動作しませんcategory.name

+0

を使用して検索可能であることになる。.. –

+0

'カテゴリーにhas_many:housings'と'住宅belongs_toの:category'私は関係を持っています。私はそれを変更する必要がありますか? –

+0

このマッピングはどこで定義されていますか? 'belongs_to:category'関連がある住宅モデルで定義している場合はうまくいくはずです。しかし、あなたが検索する必要があるすべての属性をインデックス化する必要があります。ここでは、 'category.name'と' title'だけを索引付けしました。また、Elasticsearchは既にさまざまな形式で文書を索引付けしているため、索引を最初に再作成する必要があることに注意してください。 –

関連する問題