弹性搜索查询以首先列出最低价格的产品

时间:2018-09-16 18:40:31

标签: elasticsearch

在我的弹性搜索索引电子商务应用程序中,一个产品有多个供应商,每个供应商可能都有自己的原始价格和折扣价等。

如果用户搜索产品,我需要显示最低价格的供应商详细信息(在搜索结果页面以及产品详细信息页面中)。 我如何准备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)

1 个答案:

答案 0 :(得分:0)

如果您需要索引中的订单卖方数组,则有两种解决方案 首先,找到目标文档后,您可以使用任何编程语言对该数组进行排序。 第二,您可以使用单独的文档重新索引数据以对其进行完全控制。

相关问题