0

タイヤを介したElasticsearchは私にとってはうまく機能しています。コードで直面している問題に関する提案が必要でした。

  mapping do
    indexes :id, :index => :not_analyzed
    indexes :locality
  end

これは私のマッピングの一部です. locality は、次のように定義されているモデルのメソッドに対応します

def locality
  self.locality.name
end

モデルさんも

belongs_to :locality

したがって、呼び出されたメソッドが無限ループに陥ることがわかります。回避したいフロントエンドの対応する変更により、マッピングで名前のローカリティを変更できないという制限があります。1 つの代替方法は、次を与える Locality モデルでメソッドを定義することです。

def locality_name
  self.name
end

to_indexed_json に locality_name メソッドを含めようとし、この方法でマッピングしようとしましたが失敗しました。

mapping do
  indexes :id, :index => :not_analyzed
  indexes :locality do
    indexes :locality_name
  end

end

モデル Locality を変更せずに、結果で locality の名前を「locality」としてインデックス付けする必要があります。

4

1 に答える 1

0

to_indexed_jsonインデックスの地域フィールドに別の値を提供するには、モデルにの実装を提供する必要があります。この質問to_indexed_jsonにはさらに詳細がいくつかありますが、次のようなものが機能するはずです。

self.include_root_in_json = false
def to_indexed_json
  # Get the default json for the instance
  hash = as_json(:root => false)
  # Add a locality field mapped to the name of the locality
  hash.update(:locality => self.locality.name).to_json
end
于 2013-07-24T12:34:29.573 に答える