2017-04-27 2 views
0

会社の下に18レコードがありますが、私はそれらから3レコードしか見ることができません。以下は私のクエリとPythonコードです。弾性検索からすべてのレコードを表示する方法。私はデータベースから正確に3レコードを検索することができます、弾性検索

{ 
     "query": { 
     "nested": { 
      "inner_hits": { 
      "_source": [ 
       "name", 
       "country", 
       "_matched_experiences.role" 
      ] 
      }, 
      "path": "socials", 
      "query": { 
      "match": { "socials._has_email": "true" 
      } 
      } 
     } 
     }, 
     "_source": [ 
     "com_name" 
     ] 
     } 

以下は私のPythonコードです。

with open(OUTPUT_FILENAME_1, "a") as f1: 
     csv_writer_1 = csv.writer(f1) 
     csv_writer_1.writerow(["company_name","name","country","role"]) 
     query_dictionary = {above query} 

     scroll = elasticsearch.helpers.scan(es, query=query_dictionary, index=companydirectory, scroll='60m', size=800) 
     for res in scroll: 
      try: 
       record_fields = res["_source"] 
       name = "" 
       com_name = "" 
       company_name = record_fields.get("com_name") #from the ES 
       name_record_fields = res["inner_hits"]["social_contacts"]["hits"]["hits"] 
       for j in name_record_fields: 
        name = j['_source']['name'] #from ES 
        k = j['_source']['_matched_experiences'] 
        role = k[0].get('role') 
        country = j['_source']['country'] 
        print company_name,name,validated_email_fromES, function_id,level_id, country, company_name,role 
        # csv_writer_1.writerow([company_name.encode('utf8'),name.encode('utf8'),country,role.encode('utf8')]) 

      except Exception as e1: 
       pass 

これは、ESからの出力例である:

"_source": { 
    "company_name": "Rothborns" 
    }, 
    "inner_hits": { 
    "social_contacts": { 
    "hits": { 
    "total": 18, 
    "max_score": 9.87977, 
    "hits": [ 
    { 
    "_type": "comp_directory", 
    "_id": "MC9MY", 
    "_nested": { 
    "field": "socials", 
    "offset": 36 
    }, 
    "_score": 9.787, 
    "_source": { 
    "country": "SA", 
    "name": "warner Pauli", 
    "_has_email": true, 
    "_matched_experiences": [ 
    { 
    "role": "Financial Controller" 
    } 
    ] 
    } 

合計レコードはRothborns 18です。しかし、出力ファイルにはRothbornsのレコードが3つしかありません。

助けてください。ありがとう。

答えて

2

デフォルトでinner_hitsthe size is 3を使用しているためです。クエリを次のように変更するだけです。

{ 
    "query": { 
    "nested": { 
     "inner_hits": { 
     "size": 100,     <--- add this 
     "_source": [ 
      "name", 
      "country", 
      "_matched_experiences.role" 
     ] 
     }, 
     "path": "socials", 
     "query": { 
     "match": { 
      "socials._has_email": "true" 
     } 
     } 
    } 
    }, 
    "_source": [ 
    "com_name" 
    ] 
} 
+0

ありがとう@Val。会社に100人以上の従業員がいるとすれば、どうすればそれらを集めることができますか? 「サイズ」のような可能性はありますか? – Niveram

+0

また、エラーが発生します** elasticsearch.helpers.ScanError:40のうち2つのシャードでスクロール要求が失敗しました** – Niveram

+0

デフォルトでは、取得できる最大サイズは10000です。これは私が推測するほとんどの企業にとって十分です。 – Val

関連する問題