diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-22 11:22:52 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-22 11:22:52 +0700 |
| commit | f6876ff69e37169909a40059d2945e1d84be0db3 (patch) | |
| tree | 7674dcb239efe8350fed2a5a8786b1ed4d89a830 /indoteknik_custom/models/apache_solr.py | |
| parent | 40b3ae941bce5c822d7297c8ccfc1c752409e21c (diff) | |
auto sync solr
Diffstat (limited to 'indoteknik_custom/models/apache_solr.py')
| -rw-r--r-- | indoteknik_custom/models/apache_solr.py | 119 |
1 files changed, 82 insertions, 37 deletions
diff --git a/indoteknik_custom/models/apache_solr.py b/indoteknik_custom/models/apache_solr.py index 086fb6d0..8dc5dfbe 100644 --- a/indoteknik_custom/models/apache_solr.py +++ b/indoteknik_custom/models/apache_solr.py @@ -6,15 +6,30 @@ import pysolr import time _logger = logging.getLogger(__name__) -_solr = pysolr.Solr('http://10.148.0.5:8983/solr/product/', always_commit=True, timeout=30) -_variants_solr = pysolr.Solr('http://10.148.0.5:8983/solr/variants/', always_commit=True, timeout=30) +_solr = pysolr.Solr('http://192.168.23.5:8983/solr/product/', always_commit=True, timeout=30) +_variants_solr = pysolr.Solr('http://192.168.23.5:8983/solr/variants/', always_commit=True, timeout=30) # _solr = pysolr.Solr('http://34.101.189.218:8983/solr/product/', always_commit=True, timeout=30) # for development only class ApacheSolr(models.Model): - _name = 'apache.solr' + _name = 'apache.solr' _order = 'id desc' + def get_single_doc(self, solr, id): + try: + return solr.search(f'id:{id}').docs[0] + except: + return {} + def connect(self, env): + if env == 'production_template': + return pysolr.Solr('http://192.168.23.5:8983/solr/product/', always_commit=True, timeout=30) + elif env == 'production_variant': + return pysolr.Solr('http://192.168.23.5:8983/solr/variants/', always_commit=True, timeout=30) + elif env == 'local_template': + return pysolr.Solr('http://192.168.23.5:8983/solr/product/', always_commit=True, timeout=30) + elif env == 'local_variant': + return pysolr.Solr('http://192.168.23.5:8983/solr/variants/', always_commit=True, timeout=30) + def _update_stock_product_to_solr(self, limit=10000): current_time = datetime.now() delta_time = current_time - timedelta(days=3) @@ -67,11 +82,67 @@ class ApacheSolr(models.Model): _logger.info(documents) _solr.add(documents, fieldUpdates={'product_rating_f':'set'}) - def _sync_product_to_solr(self, limit=500): + def _sync_product_template_to_solr(self, limit=500): + start_time = time.time() + _logger.info('run sync to solr...') + query = ["&","&",("type","=","product"),("active","=",True),"|",("solr_flag","=",0),("solr_flag","=",2)] + + templates = self.env['product.template'].search(query, limit=limit) + documents = [] + counter = 0 + for template in templates: + template_time = time.time() + counter += 1 + variants_name = variants_code = '' + if template.product_variant_count > 1: + for variant in template.product_variant_ids: + variants_name += variant.display_name or ''+', ' + variants_code += variant.default_code or ''+', ' + + category_id = '' + category_name = '' + for category in template.public_categ_ids: + category_id = category.id + category_name = category.name + + document = { + # Start Product Template + 'id': template.id, + 'display_name_s': template.display_name, + 'name_s': template.name, + 'default_code_s': template.default_code or '', + 'product_rating_f': template.virtual_rating, + 'product_id_i': template.id, + 'image_s': self.env['ir.attachment'].api_image('product.template', 'image_512', template.id), + 'variant_total_i': template.product_variant_count, + 'stock_total_f': template.qty_stock_vendor, + 'weight_f': template.weight, + 'manufacture_id_i': template.x_manufacture.id or 0, + 'manufacture_name_s': template.x_manufacture.x_name or '', + 'manufacture_name': template.x_manufacture.x_name or '', + 'image_promotion_1_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_1', template.x_manufacture.id), + 'image_promotion_2_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_2', template.x_manufacture.id), + 'variants_name_t': variants_name, + 'variants_code_t': variants_code, + 'search_rank_i': template.search_rank, + 'search_rank_weekly_i': template.search_rank_weekly, + 'category_id_i': category_id or 0, + 'category_name_s': category_name or '', + 'category_name': category_name or '', + # End Product Template + } + documents.append(document) + template.solr_flag = 1 + _logger.info('[SYNC_PRODUCT_TO_SOLR] {}/{} {:.6f}'.format(counter, limit, time.time() - template_time)) + _logger.info('[SYNC_PRODUCT_TO_SOLR] Success add to solr product %s' % template.id) + _solr.add(documents) + end_time = time.time() + _logger.info("[SYNC_PRODUCT_TO_SOLR] Finish task add to solr. Time taken: {:.6f} seconds".format(end_time - start_time)) + + def _sync_product_pricelist_to_solr(self, limit=500): start_time = time.time() _logger.info('run sync to solr...') query = ["&","&",("type","=","product"),("active","=",True),"|",("solr_flag","=",0),("solr_flag","=",2)] - # query = [('id', '=', 97942)] templates = self.env['product.template'].search(query, limit=limit) documents = [] @@ -116,51 +187,25 @@ class ApacheSolr(models.Model): tier2 = template.product_variant_id._get_pricelist_tier2() tier3 = template.product_variant_id._get_pricelist_tier3() - category_id = '' - category_name = '' - for category in template.public_categ_ids: - category_id = category.id - category_name = category.name - document = { - 'id': template.id, - 'display_name_s': template.display_name, - 'name_s': template.name, - 'default_code_s': template.default_code or '', - 'product_rating_f': template.virtual_rating, - 'product_id_i': template.id, - 'image_s': self.env['ir.attachment'].api_image('product.template', 'image_512', template.id), - 'price_f': price_excl, - 'discount_f': discount, - 'price_discount_f': price_excl_after_disc, - 'tax_f': tax, - 'variant_total_i': template.product_variant_count, - 'stock_total_f': template.qty_stock_vendor, - 'weight_f': template.weight, - 'manufacture_id_i': template.x_manufacture.id or 0, - 'manufacture_name_s': template.x_manufacture.x_name or '', - 'manufacture_name': template.x_manufacture.x_name or '', - 'image_promotion_1_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_1', template.x_manufacture.id), - 'image_promotion_2_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_2', template.x_manufacture.id), - 'category_id_i': category_id or 0, - 'category_name_s': category_name or '', - 'category_name': category_name or '', - 'variants_name_t': variants_name, - 'variants_code_t': variants_code, - 'search_rank_i': template.search_rank, - 'search_rank_weekly_i': template.search_rank_weekly, + # Start Product Pricelist 'flashsale_id_i': flashsale_data['flashsale_id'] or 0, 'flashsale_tag_s': flashsale_data['flashsale_tag'] or '', 'flashsale_name_s': flashsale_data['flashsale_name'] or '', 'flashsale_base_price_f': flashsale_data['flashsale_base_price'] or 0, 'flashsale_discount_f': flashsale_data['flashsale_discount'] or 0, 'flashsale_price_f': flashsale_data['flashsale_price'] or 0, + 'price_f': price_excl, + 'discount_f': discount, + 'price_discount_f': price_excl_after_disc, + 'tax_f': tax, 'discount_tier1_f': tier1['discount_tier1'] or 0, 'price_tier1_f': tier1['price_tier1'] or 0, 'discount_tier2_f': tier2['discount_tier2'] or 0, 'price_tier2_f': tier2['price_tier2'] or 0, 'discount_tier3_f': tier3['discount_tier3'] or 0, 'price_tier3_f': tier3['price_tier3'] or 0 + # End Product Pricelist } documents.append(document) template.solr_flag = 1 |
