summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/apache_solr.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2023-08-22 11:22:52 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2023-08-22 11:22:52 +0700
commitf6876ff69e37169909a40059d2945e1d84be0db3 (patch)
tree7674dcb239efe8350fed2a5a8786b1ed4d89a830 /indoteknik_custom/models/apache_solr.py
parent40b3ae941bce5c822d7297c8ccfc1c752409e21c (diff)
auto sync solr
Diffstat (limited to 'indoteknik_custom/models/apache_solr.py')
-rw-r--r--indoteknik_custom/models/apache_solr.py119
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