summaryrefslogtreecommitdiff
path: root/src/pages/api/shop
diff options
context:
space:
mode:
authortrisusilo48 <tri.susilo@altama.co.id>2024-09-11 10:02:37 +0700
committertrisusilo48 <tri.susilo@altama.co.id>2024-09-11 10:02:37 +0700
commit1e8959ef719689bc8ddd2477fa12e960f4c9a759 (patch)
treea664927978785e8d084ed20f75e6ebf5535a844d /src/pages/api/shop
parentaff296d79cc148a919b33c2c589d6b803fb39a22 (diff)
cr - operation , handle minimum match
Diffstat (limited to 'src/pages/api/shop')
-rw-r--r--src/pages/api/shop/search.js28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index 1b6377f4..550217d8 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -16,6 +16,7 @@ export default async function handler(req, res) {
operation = 'AND',
fq = '',
limit = 30,
+ source = '',
} = req.query;
let { stock = '' } = req.query;
@@ -65,7 +66,18 @@ export default async function handler(req, res) {
// let newQ = keywords;
let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/);
- let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q);
+ let newQ = escapeSolrQuery(q);
+
+ const formattedQuery = `(${newQ.split(' ').map(term => `${term}*`).join(' ') })`;
+ const mm = checkQ.length > 2 ? checkQ.length > 5 ? '65%' : '85%' : `${checkQ.length}`;
+
+ const filterQueries = [
+ '-publish_b:false',
+ 'product_rating_f:[8 TO *]',
+ 'price_tier1_v2_f:[1 TO *]'
+ ];
+
+ const fq_ = filterQueries.join('AND ');
let offset = (page - 1) * limit;
let parameter = [
@@ -74,15 +86,15 @@ export default async function handler(req, res) {
'facet=true',
'indent=true',
`facet.query=${escapeSolrQuery(q)}`,
- `q.op=${operation}`,
- `q=${newQ}`,
+ `q.op=OR`,
+ `q=${source == 'similar' || checkQ.length < 3 ? newQ + '*' : formattedQuery }`,
`defType=edismax`,
'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s',
`start=${parseInt(offset)}`,
`rows=${limit}`,
`sort=${paramOrderBy}`,
- `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`,
- `mm=2`
+ `fq=${encodeURIComponent(fq_)}`,
+ `mm=${encodeURIComponent(mm)}`,
];
if (priceFrom > 0 || priceTo > 0) {
@@ -120,10 +132,12 @@ export default async function handler(req, res) {
if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`);
// Single fq in url params
- if (typeof fq === 'string') parameter.push(`fq=${fq}`);
+ if (typeof fq === 'string') parameter.push(`fq=${encodeURIComponent(fq)}`);
// Multi fq in url params
if (Array.isArray(fq))
- parameter = parameter.concat(fq.map((val) => `fq=${val}`));
+ parameter = parameter.concat(fq.map((val) => `fq=${encodeURIComponent(val)}`));
+
+ console.log('ini params', parameter);
let result = await axios(
process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&')