如何添加到不同的字段值并将其存储在弹性搜索python中的另一个字段中(弹性搜索字段操作)

时间:2018-07-26 21:56:14

标签: elasticsearch elasticsearch-5 elasticsearch-2.0 elasticsearch-aggregation

我写了这个弹性搜索查询:

es.search(index=['ind1'],doc_type=['doc'])

我得到以下结果:

{'_shards': {'failed': 0, 'skipped': 0, 'successful': 5, 'total': 5},
'hits': {'hits': [{'_id': '1327',
'_index': 'ind1',
'_score': 1.0,
'_source': {'val1': 1,
 'val2': None,
 'value1': 1327,
 'value2': 1531,
 'new_values': {'nv1': 1,
  'nv2': 0},
{'_id': '1349',
'_index': 'ind1',
'_score': 1.0,
'_source': {'val1': 2,
 'val2': 3,
 'value1': 1328,
 'value2': 1539,
 'new_values': {'nv1': 1,
  'nv2': 3}},.......

我想要所有加法val1,value1和nv1并将其存储在另一个字段中,让我们称之为total。我希望结果像这样:

{'_shards': {'failed': 0, 'skipped': 0, 'successful': 5, 'total': 5},
'hits': {'hits': [{'_id': '1327',
'_index': 'ind1',
'_score': 1.0,
'_source': {'val1': 1,
 'val2': None,
 'value1': 1327,
 'value2': 1531,
 'new_values': {'nv1': 1,
  'nv2': 0},
 'total1': 1329},
{'_id': '1349',
'_index': 'ind1',
'_score': 1.0,
'_source': {'val1': 2,
 'val2': 3,
 'value1': 1328,
 'value2': 1539,
 'new_values': {'nv1': 1,
  'nv2': 3},
  'total': 1331},.......

1 个答案:

答案 0 :(得分:0)

您可以做的是使用脚本字段来即时计算该值:

 es.search(index=['ind1'],doc_type=['doc'], body={
    '_source': true,
    'script_fields': {
      'total': {
        'script': {
          'source': 'doc.val1 + doc.value1 + doc.new_values.nv1'
        }
      }
    }
 })

不过,最好的方法是在索引时对其进行预先计算,并将值存储在新的total字段中。