2016-08-16 3 views
1

В настоящее время мы используем AWS RDS (Mysql) + Pandas. У нас есть заказ, клиенты, таблицы продуктов и так далее. Чтобы получать клиентов и проводить кампанию на основе различных фильтров (всего 18 фильтров) для этих клиентов, требуется слишком много времени. Сама таблица «Order» имеет величину в миллион строк. Итак, чтобы ускорить работу Мы начали делать poc с elasticsearch, поскольку наши фильтры содержат слишком много текстовых запросов, например, «имя продукта», «имя поставщика» и т. Д.ускорить процесс резки клиентов mysql

Проблема, которую мы сталкиваемся с является 1) Фильтрация по AOV ведре (среднее значение порядка), с relavent детали документа также 2) Фильтрация на ордена подсчитывать 3) Фильтрация по first_order_date и last_order_date

Наш документ структура

{ 
    "order_id":"6", 
    "customer_id":"1", 
    "customer_name":"shailendra", 
    "mailing_addres":"[email protected]", 
    "actual_order_date":"2000-04-30", 
    "is_veg":"0", 
    "total_amount":"2499", 
    "store_id":"276", 
    "city_id":"12", 
    "payment_mode":"cod", 
    "is_elite":"0", 
    "product":["1","2"], 
    "coupon_id":"", 
    "client_source":"1", 
    "vendor_id":"", 
    "vendor_name: "", 
    "brand_id":"", 
    "third_party_source":"" 

} 

это запрос,

{ 
    "aggs": { 
     "customer_ids":{ 
      "terms":{ 
       "field":"customer_id" 
      } 
     } 
    } 
} 

он дал результаты, как

{ 
    "took": 13, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 8, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "5", 
     "_score": 1, 
     "_source": { 
      "order_id": "5", 
      "customer_id": "5", 
      "customer_name": "ashish", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-05-30", 
      "is_veg": "1", 
      "total_amount": "300", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "8", 
     "_score": 1, 
     "_source": { 
      "order_id": "8", 
      "customer_id": "2", 
      "customer_name": "nikhil", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-05-30", 
      "is_veg": "0", 
      "total_amount": "249", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "2", 
     "_score": 1, 
     "_source": { 
      "order_id": "2", 
      "customer_id": "2", 
      "customer_name": "nikhil", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-01-30", 
      "is_veg": "1", 
      "total_amount": "255", 
      "store_id": "1", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2", 
      "3" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "4", 
     "_score": 1, 
     "_source": { 
      "order_id": "4", 
      "customer_id": "4", 
      "customer_name": "vivek", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-04-30", 
      "is_veg": "0", 
      "total_amount": "249", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "6", 
     "_score": 1, 
     "_source": { 
      "order_id": "7", 
      "customer_id": "1", 
      "customer_name": "shailendra", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-05-30", 
      "is_veg": "0", 
      "total_amount": "249", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "1", 
     "_score": 1, 
     "_source": { 
      "order_id": "1", 
      "customer_id": "1", 
      "customer_name": "shailendra", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-01-30", 
      "is_veg": "1", 
      "total_amount": "251", 
      "store_id": "1", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2", 
      "3" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "7", 
     "_score": 1, 
     "_source": { 
      "order_id": "6", 
      "customer_id": "4", 
      "customer_name": "vivek", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-05-30", 
      "is_veg": "0", 
      "total_amount": "249", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     }, 
     { 
     "_index": "customers4", 
     "_type": "details", 
     "_id": "3", 
     "_score": 1, 
     "_source": { 
      "order_id": "3", 
      "customer_id": "3", 
      "customer_name": "manish", 
      "mailing_addres": "[email protected]", 
      "actual_order_date": "2016-03-30", 
      "is_veg": "0", 
      "total_amount": "249", 
      "store_id": "2", 
      "city_id": "", 
      "payment_mode": "cod", 
      "is_elite": "0", 
      "product": [ 
      "1", 
      "2" 
      ], 
      "coupon_id": "", 
      "client_source": "1", 
      "vendor_id": "", 
      "brand_id": "", 
      "third_party_source": "" 
     } 
     } 
    ] 
    }, 
    "aggregations": { 
    "customer_ids": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": "1", 
      "doc_count": 2 
     }, 
     { 
      "key": "2", 
      "doc_count": 2 
     }, 
     { 
      "key": "4", 
      "doc_count": 2 
     }, 
     { 
      "key": "3", 
      "doc_count": 1 
     }, 
     { 
      "key": "5", 
      "doc_count": 1 
     } 
     ] 
    } 
    } 
} 

здесь, как и можно видеть только граф документ возвращается. мы хотим, чтобы все поля документа вместе с номером doc

+1

Можете ли вы показать, какие запросы вы пробовали до сих пор и как они не подходят для достижения того, чего вы хотите? – Val

+0

это основные { "Aggs": { " customer_ids": { "термины": { "поле": "customer_id" }} }} – user6720627

ответ

0

Вы можете использовать top_hits aggregation для извлечения документов для каждого контейнера клиента.

{ 
    "aggs": { 
     "customer_ids":{ 
      "terms":{ 
       "field":"customer_id" 
      }, 
      "aggs": { 
       "docs": { 
       "top_hits": { 
        "size": 3 
       } 
       } 
      } 
     } 
    } 
} 
+0

спасибо за это. просто хотел узнать после применения группы, можем ли мы фильтровать клиентов на основе max (actual_order_date) этого клиента между двумя датами? – user6720627

+0

Вы хотите только самую последнюю дату заказа от этого клиента между двумя датами? – Val

+0

Да, дата последнего заказа клиента между двумя датами и датой первого заказа клиента между двумя датами – user6720627

Смежные вопросы