import { productMappingSolr } from '@/utils/solrMapping' import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; export default async function handler(req, res) { const { q = null, op = 'AND' } = req.query if (!q) { return res.status(422).json({ error: 'parameter missing' }) } /*let parameter = [ `q=${escapeSolrQuery(q)}`, `q.op=${op}`, `indent=true`, `fq=-publish_b:false`, `qf=name_s^2 description_s`, `facetch=true`, `fq=price_tier1_v2_f:[1 TO *]`, `rows=10`, `sort=product_rating_f DESC, price_discount_f DESC`, ]; let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') );*/ let parameter = [ `q=${q}`, `q.op=${op}`, `debugQuery=on`, `defType=edismax`, `df=display_name_s`, `fq=-publish_b:false`, `rows=5`, ]; if(op == 'AND'){ parameter.push(`sort=product_rating_f DESC, price_discount_f DESC`); parameter.push(`rows=1`); } let result = await axios( process.env.SOLR_HOST + '/solr/recommendation/select?' + parameter.join('&') ); try { result.data = camelcaseObjectDeep(result.data) res.status(200).json(result.data) } catch (error) { res.status(400).json({ error: error.message }); } } const escapeSolrQuery = (query) => { if (query == '*') return query; const specialChars = /([\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/])/g; const words = query.split(/\s+/); const escapedWords = words.map((word) => { if (specialChars.test(word)) { return `"${word.replace(specialChars, '\\$1')}"`; } return word; }); return escapedWords.join(' '); };