0

モデルにElasticSearch統合を実装しています:

require 'elasticsearch/model'
class MissionDef < ActiveRecord::Base
  # field: name (String(40))
  # field: icon (String(2000))
  # field: definition (String)
  # field: public, boolean

  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  def as_indexed_json(options={})
    self.as_json(
     only: [:id, :name]
     )
  end
end

私のRailsコンソールでは、次のことを行いました。

MissionDef.import

MissionDef.first

MissionDef id: 226, ade_channel_key: "d403d658313e6c35ce", name: "Test Mission", icon: "/app/assets/images/badges/Showedup.png", definition: "{}", deleted_at: nil, created_at: "2015-08-04 11:30:08", updated_at: "2015-08-04 11:30:08", container_id: 883, public: true

マイクエリ

1) 索引付けされていない名前と ID 以外のフィールド値で検索を行うと、検索結果が得られます。例:

result = MissionDef.search 'app' --- 動作します result.records.count => 1

これは私が推測するケースではありません。

2) Missiondef.first.as_indexed_json => が正しく機能しないため、JSON としてオブジェクト全体として o/p が返されます

{"id"=>226, "ade_channel_key"=>"d403d658313e6c35ce", "name"=>"テスト ミッション", "icon"=>"/app/assets/images/badges/Showedup.png", "定義" =>"{}", "created_at"=>2015 年 8 月 4 日 11:30:08 UTC +00:00、"updated_at"=>2015 年 8 月 4 日 11:30:08 UTC +00:00、" container_id"=>883, "public"=>true}

4

1 に答える 1

0

以前に宝石を使用したことはありませんelasticsearch-railsが、デフォルトではelasticsearchがドキュメント全体を検索することがわかっているため、クエリで特定のフィールドのみを指定したい場合. したがって、指定された例でappは、アイコンフィールドと一致しています: / app /assets/images/badges/Showedup.png

検索するフィールドを指定してみてください。詳細については、https ://github.com/elastic/elasticsearch-rails/blob/master/elasticsearch-model/README.md#the-elasticsearch-dsl のドキュメントを参照してください。

したがって、この場合は次のようになります。

result = MissionDef.search query: {match:  {name: "app" }}
result.records.count #=> should be 0 this time
于 2015-08-07T17:28:17.563 に答える