mirror of
https://github.com/strapi/strapi.git
synced 2025-11-03 03:17:11 +00:00
Handle count for search query
This commit is contained in:
parent
60e0c6dcdb
commit
abc8395f2d
@ -60,14 +60,11 @@ module.exports = {
|
||||
// Search in columns which are not text value.
|
||||
searchNoText.forEach(attribute => {
|
||||
qb.orWhereRaw(`LOWER(${attribute}) LIKE '%${_.toLower(params.search).replace(/[^a-zA-Z. ]/g, '')}%'`);
|
||||
})
|
||||
});
|
||||
|
||||
// Search in columns with text using index.
|
||||
switch (this.client) {
|
||||
case 'mysql':
|
||||
qb.orWhereRaw(`MATCH(${searchText.join(',')}) AGAINST(? IN BOOLEAN MODE)`, `*${params.search.replace(/[^a-zA-Z. ]/g, '')}*`);
|
||||
break;
|
||||
case 'pg':
|
||||
case 'pg': {
|
||||
const searchQuery = searchText.map(attribute =>
|
||||
_.toLower(attribute) === attribute
|
||||
? `to_tsvector(${attribute})`
|
||||
@ -75,7 +72,11 @@ module.exports = {
|
||||
);
|
||||
|
||||
qb.orWhereRaw(`${searchQuery.join(' || ')} @@ to_tsquery(?)`, params.search.replace(/[^a-zA-Z. ]/g, ''));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
qb.orWhereRaw(`MATCH(${searchText.join(',')}) AGAINST(? IN BOOLEAN MODE)`, `*${params.search.replace(/[^a-zA-Z. ]/g, '')}*`);
|
||||
break;
|
||||
}
|
||||
|
||||
if (params.sort) {
|
||||
@ -95,7 +96,38 @@ module.exports = {
|
||||
},
|
||||
|
||||
countSearch: async function (params = {}) {
|
||||
return 0;
|
||||
const associations = this.associations.map(x => x.alias);
|
||||
const searchText = Object.keys(this._attributes)
|
||||
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
|
||||
.filter(attribute => ['string', 'type'].includes(this._attributes[attribute].type));
|
||||
|
||||
const searchNoText = Object.keys(this._attributes)
|
||||
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
|
||||
.filter(attribute => !['string', 'type'].includes(this._attributes[attribute].type));
|
||||
|
||||
return this.query(qb => {
|
||||
// Search in columns which are not text value.
|
||||
searchNoText.forEach(attribute => {
|
||||
qb.orWhereRaw(`LOWER(${attribute}) LIKE '%${_.toLower(params.search).replace(/[^a-zA-Z. ]/g, '')}%'`);
|
||||
});
|
||||
|
||||
// Search in columns with text using index.
|
||||
switch (this.client) {
|
||||
case 'pg': {
|
||||
const searchQuery = searchText.map(attribute =>
|
||||
_.toLower(attribute) === attribute
|
||||
? `to_tsvector(${attribute})`
|
||||
: `to_tsvector('${attribute}')`
|
||||
);
|
||||
|
||||
qb.orWhereRaw(`${searchQuery.join(' || ')} @@ to_tsquery(?)`, params.search.replace(/[^a-zA-Z. ]/g, ''));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
qb.orWhereRaw(`MATCH(${searchText.join(',')}) AGAINST(? IN BOOLEAN MODE)`, `*${params.search.replace(/[^a-zA-Z. ]/g, '')}*`);
|
||||
break;
|
||||
}
|
||||
}).count();
|
||||
},
|
||||
|
||||
findOne: async function (params, populate) {
|
||||
|
||||
@ -44,7 +44,6 @@ module.exports = {
|
||||
},
|
||||
|
||||
find: async ctx => {
|
||||
console.log(ctx.request.query);
|
||||
// Search
|
||||
if (!_.isEmpty(ctx.request.query.q)) {
|
||||
ctx.body = await strapi.plugins['content-manager'].services['contentmanager'].search(ctx.params, ctx.request.query);
|
||||
|
||||
@ -26,8 +26,6 @@ module.exports = {
|
||||
const { limit, skip, sort, source, q, populate = [] } = query; // eslint-disable-line no-unused-vars
|
||||
const filters = strapi.utils.models.convertParams(params.model, query);
|
||||
|
||||
console.log("SEARCH", q);
|
||||
|
||||
// Find entries using `queries` system
|
||||
return await strapi.query(params.model, source).search({
|
||||
limit: limit || filters.limit,
|
||||
@ -40,8 +38,6 @@ module.exports = {
|
||||
countSearch: async (params, query) => {
|
||||
const { source, q } = query;
|
||||
|
||||
console.log("COUNT SEARCH", q);
|
||||
|
||||
return await strapi.query(params.model, source).countSearch({ search: q });
|
||||
},
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user