summaryrefslogtreecommitdiff
path: root/src/pages/api/shop
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-04-10 14:43:30 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-04-10 14:43:30 +0700
commit9c2c365da1edb2e2835d19303cdee81e53f3deb8 (patch)
tree372ab9938a9b360e73bc6ca31d53906eab4d5aff /src/pages/api/shop
parent4a05c21f583e1482acb126d51aafe5cbce49707f (diff)
fix reset password, register, search, suggest
Diffstat (limited to 'src/pages/api/shop')
-rw-r--r--src/pages/api/shop/search.js30
-rw-r--r--src/pages/api/shop/suggest.js2
2 files changed, 21 insertions, 11 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index ef070dcd..bab96237 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -15,19 +15,19 @@ export default async function handler(req, res) {
limit = 30
} = req.query
- let paramOrderBy = ''
+ let paramOrderBy = 'product_rating_f DESC'
switch (orderBy) {
case 'price-asc':
- paramOrderBy = ', price_discount_f ASC'
+ paramOrderBy += ', price_discount_f ASC'
break
case 'price-desc':
- paramOrderBy = ', price_discount_f DESC'
+ paramOrderBy += ', price_discount_f DESC'
break
case 'popular':
- paramOrderBy = ', search_rank_i DESC'
+ paramOrderBy += ', search_rank_i DESC'
break
case 'stock':
- paramOrderBy = ', stock_total_f DESC'
+ paramOrderBy += ', stock_total_f DESC'
break
}
@@ -37,12 +37,13 @@ export default async function handler(req, res) {
'facet.field=category_name',
'facet=true',
'indent=true',
- `facet.query=${q}`,
+ `facet.query=${escapeSolrQuery(q)}`,
`q.op=${operation}`,
`q=${escapeSolrQuery(q)}`,
+ 'qf=name_s',
`start=${offset}`,
`rows=${limit}`,
- `sort=product_rating_f DESC ${paramOrderBy}`,
+ `sort=${paramOrderBy}`,
`fq=price_discount_f:[${priceFrom == '' ? '*' : priceFrom} TO ${priceTo == '' ? '*' : priceTo}]`
]
@@ -68,9 +69,18 @@ export default async function handler(req, res) {
}
const escapeSolrQuery = (query) => {
- const specialChars = /[\]\[{}()"\\]/g
- const escapedQuery = query.replace(specialChars, '\\$&')
- return escapedQuery
+ 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(' ')
}
const productResponseMap = (products) => {
diff --git a/src/pages/api/shop/suggest.js b/src/pages/api/shop/suggest.js
index 5a1b559a..83ab69d4 100644
--- a/src/pages/api/shop/suggest.js
+++ b/src/pages/api/shop/suggest.js
@@ -5,7 +5,7 @@ export default async function handler(req, res) {
let result = await axios(
process.env.SOLR_HOST +
- `/solr/product/suggest?suggest=true&suggest.dictionary=mySuggester&suggest.q=${q}`
+ `/solr/product/suggest?suggest=true&suggest.dictionary=mySuggester&q=${q}`
)
try {
res.status(200).json(result.data.suggest.mySuggester[q])