0

タイヤジェムを介したElasticSearchを使用しています。

私のリソースモデルにインデックスを付けるためにこの構造を与えられました

mapping do
  indexes :_id
  indexes :version,             analyzer: 'snowball', boost: 100 
  indexes :resource_files do
    indexes :_id
    indexes :name,                analyzer: 'snowball', boost: 100
    indexes :resource_file_category do
      indexes :_id
      indexes :name,                analyzer: 'snowball', boost: 100
    end
  end
end

特定のresource_file_categoryIDを持つresource_filesを持つすべてのリソースを取得するにはどうすればよいですか?

Elastic Searchのドキュメントを調べましたが、has childfilterhttp://www.elasticsearch.org/guide/reference/query-dsl/has-child-filter.htmlを使用している可能性があります

私はこの方法を試しました

filter :has_child, :type => 'resource_files', :query => {:filter => {:has_child => {:type => 'resource_file_category', :query => {:filter => {:term => {'_id' => params[:resource_file_category_id]}}}}}}

しかし、「ネストされたhas_childフィルター」を作成することが可能/有効かどうか、またはこれを行うためのより良い/より簡単な方法があるかどうかはわかりません...アドバイスは大歓迎です;)

4

2 に答える 2

2

恐れ入りますが、マッピング定義の意味がわかりません。次の出力を投稿した方が読みやすくなります。

curl -XGET 'http://127.0.0.1:9200/YOUR_INDEX/_mapping?pretty=1' 

しかし、おそらく次のようなものが必要です。

curl -XGET 'http://127.0.0.1:9200/YOUR_INDEX/YOUR_TYPE/_search?pretty=1'  -d '
{
   "query" : {
      "term" : {
         "resource_files.resource_file_catagory._id" : "YOUR VALUE"
      }
   }
}
'

注:_idフィールドは、分析されないようにマッピングする必要が{"index": "not_analyzed"}ありますが、代わりに正確な値を格納します。それ以外の場合、保存されている実際の用語は次のとおりであるため、ドキュメントのtermクエリを実行し'FOO BAR'ても見つかりません。['foo','bar']

注:has_childクエリは、特定の検索条件に一致する子ドキュメント(つまり、親のタイプとIDを指定するドキュメント)を持つ親ドキュメントを検索するために使用されます。

于 2012-07-16T17:33:31.053 に答える
0

ドット演算子を使用して、ネストされたデータにアクセスできます。

あなたはこのようなことを試すことができます:

curl -XGET 'http://loclahost:port/INDEX/TYPE/_search?pretty=1'  -d 
'{
   "query": {
     "match": {
        "resource_files.resource_file_catagory.name": "VALUE"
      }
   }
 }'

resource_file_catagoryがnon_analyzedの場合、値はトークン化されず、単一の値として格納されるため、完全に一致します。

また、elasticsearch-headプラグインを使用して、データの検証やクエリ構築の参照を行うこともできます。

https://www.elastic.co/guide/en/elasticsearch/reference/1.4/modules-plugins.htmlまたは https://mobz.github.io/elasticsearch-head/

于 2016-02-24T22:53:30.300 に答える