0

私はこのようになりますJSONファイルがあります。ElasticSearchのマッピングを変更せずに、フィールド内の複数のエントリを動的に取得しますか?

{'name':'John Doe', 
'work':[{ 
'company':'Google', 
'duration':'2 years', 
'desc':'some long text'}, 
{ 
'company':'Yahoo', 
'duration':'3 years', 
'desc':'some long text'}]} 

を0から、未知の作品内のエントリの数に制限はありません。 elasticsearchマッピングを定義して自動的に格納する方法を教えてください。

私はこのような何か試してみました:これで私を助けてください

from elasticsearch import elasticsearch 
mapping:{  
"settings": { 
    "number_of_shards": 5, 
    "number_of_replicas": 1 
}, 
"man":{ 
    "properties": { 
     "name":{"type":"text"}, 
     "work":{ 
      "properties": { 
       "company" : {"type":"text"}, 
       "duration": {"type":"text"}, 
       "desc": {"type":"text"} 
       } 
      } 
     } 
    } 
} 

es = Elasticsearch() 

if es.indices.exists("test"): 
    es.indices.delete(index="test") 

es.indices.create("test") 
es.indices.put_mapping(index="test", doc_type="man", body=mapping) 

を。ありがとう。

+0

あなたのマッピングは正常です。それを試しましたか?何が起こった? – Val

+1

問題の詳細を教えてください。ネストされたオブジェクトを作成しようとしていますか? Elasticは、特別なアナライザーやフィールドを使用していない場合に、マッピングを自動的に作成する必要はありません。 –

+0

@ FilipCordas-はいネスティングオブジェクトを作成しようとしています – anshaj

答えて

1

elasticsearchでは、すべてのフィールドを複数値にすることができます。したがって、値のリストを保持するために特別な処理を行う必要はありません。他のフィールドと自動的にマージされます。
オブジェクトの配列はインデックス時に平坦化されます。だから、あなたはどんな相関関係も失うでしょう。あなたのデータは、あなたのオブジェクト内のすべてのフィールドについて、work.company = ["google"、 "yahoo"]として索引付けされます。だから、特定の期間、googleで働いていた人を検索することはできません。そのユースケースをお持ちの場合は、ネストされたオブジェクトに移動する必要があります。マッピングでネストされた型を作成するだけです。配列型を指定する必要はありません。

関連する問題