在我的弹性搜索索引电子商务应用程序中,一个产品有多个供应商,每个供应商可能都有自己的原始价格和折扣价等。
如果用户搜索产品,我需要显示最低价格的供应商详细信息(在搜索结果页面以及产品详细信息页面中)。 我如何准备Elasticsearch多重匹配查询以按价格升序获取具有price / offerPrice的相关记录? 有没有比这更好的设计了?
我已经按照以下嵌套对象格式在Elastic搜索中创建了索引
data = {'P&G': [{'name': ['Big'], 'data': [0, 0, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 0, 0, 0, 1]},
{'name': ['Monitoring'], 'data': [0, 0, 1, 0, 1]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 0]}],
'ABCD': [{'name': ['Big'], 'data': [0, 1, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 0, 1, 0, 0]},
{'name': ['Monitoring'], 'data': [0, 3, 1, 0, 1]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 0]}],
'WORLD': [{'name': ['Big'], 'data': [0, 0, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 1, 0, 0, 0]},
{'name': ['Monitoring'], 'data': [0, 0, 0, 2, 0]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 1]}],
'Migration': [{'name': ['Big'], 'data': [1, 0, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 0, 0, 0, 0]},
{'name': ['Monitoring'], 'data': [2, 0, 0, 0, 0]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 0]}],
'Channel': [{'name': ['Big'], 'data': [0, 2, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 1, 0, 0, 0]},
{'name': ['Monitoring'], 'data': [0, 1, 0, 0, 0]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 0]}],
'AVR': [{'name': ['Big'], 'data': [0, 0, 0, 0, 0]},
{'name': ['Small'], 'data': [0, 0, 0, 0, 0]},
{'name': ['Monitoring'], 'data': [0, 1, 0, 0, 0]},
{'name': ['Improvement'], 'data': [0, 0, 0, 0, 0]}]}
x_axis = {'P&G': {'categories': ['April', 'January', 'June', 'March', 'May']},
'ABCD': {'categories': ['April', 'January', 'June', 'March', 'May']},
'WORLD': {'categories': ['April', 'January', 'June', 'March', 'May']},
'Migration': {'categories': ['April', 'January', 'June', 'March', 'May']},
'Channel': {'categories': ['April', 'January', 'June', 'March', 'May']},
'AVR': {'categories': ['April', 'January', 'June', 'March', 'May']}}
target_month_order = ['January', 'March', 'April', 'May', 'June']
final_data = dict()
for name in x_axis.keys():
# Modifying data1
final_data[name] = dict()
final_data[name]['categories'] = target_month_order
# Modifying data2
final_data[name]['series'] = list()
print('Swapping - ', name)
actual_month_order = x_axis[name]['categories']
swap_index = [actual_month_order.index(month) for month in target_month_order]
_tmp = data[name]
for _val in _tmp:
_new_list = []
for swap_idx in swap_index:
_new_list.append(_val['data'][swap_idx])
# print(list(zip(actual_month_order, _val['data'])))
# print(list(zip(target_month_order, _new_list)))
final_data[name]['series'].append({'name': _val['name'], 'data': _new_list})
print('--')
# print(swap_index)
# print(final_data[name]['series'])
print(' *-*' * 20)
import pprint
pprint.pprint(final_data)
答案 0 :(得分:0)
如果您需要索引中的订单卖方数组,则有两种解决方案 首先,找到目标文档后,您可以使用任何编程语言对该数组进行排序。 第二,您可以使用单独的文档重新索引数据以对其进行完全控制。