Added content type filter
Added claim type filter Improved filtering and return no results when wrong input List of types as input for mediaType and contentType
This commit is contained in:
parent
1e39ffc61a
commit
70415626c5
2 changed files with 40 additions and 2 deletions
|
@ -255,14 +255,49 @@ function getAutoCompleteQuery (query) {
|
||||||
};
|
};
|
||||||
|
|
||||||
function getFilters (input) {
|
function getFilters (input) {
|
||||||
// this is the best place for putting things like filtering on the type of content
|
|
||||||
// Perhaps we can add search param that will filter on how people have categorized / tagged their content
|
|
||||||
var filters = [];
|
var filters = [];
|
||||||
var bidStateFilter = {'bool': {'must_not': {'match': { 'bid_state': 'Accepted' }}}};
|
var bidStateFilter = {'bool': {'must_not': {'match': { 'bid_state': 'Accepted' }}}};
|
||||||
if (input.nsfw === 'true' || input.nsfw === 'false') {
|
if (input.nsfw === 'true' || input.nsfw === 'false') {
|
||||||
const nsfwFilter = {'match': {'value.stream.metadata.nsfw': input.nsfw}};
|
const nsfwFilter = {'match': {'value.stream.metadata.nsfw': input.nsfw}};
|
||||||
filters.push(nsfwFilter);
|
filters.push(nsfwFilter);
|
||||||
}
|
}
|
||||||
|
if (input.contentType !== undefined) {
|
||||||
|
const contentTypes = input.contentType.split(',');
|
||||||
|
const contentFilter = {'terms': {'value.stream.source.contentType.keyword': contentTypes}};
|
||||||
|
filters.push(contentFilter);
|
||||||
|
}
|
||||||
|
if (input.mediaType !== undefined) {
|
||||||
|
const mediaTypes = input.mediaType.split(',');
|
||||||
|
const possibleTypes = ['audio', 'video', 'text', 'application', 'image'];
|
||||||
|
const shouldQueries = [];
|
||||||
|
for (var i = 0; i < mediaTypes.length; i++) {
|
||||||
|
if (possibleTypes.includes(mediaTypes[i])) {
|
||||||
|
const mediaFilter = {'prefix': {'value.stream.source.contentType.keyword': mediaTypes[i] + '/'}};
|
||||||
|
shouldQueries.push(mediaFilter);
|
||||||
|
} else if (mediaTypes[i] === 'cad') {
|
||||||
|
const cadTypes = ['SKP', 'simplify3d_stl'];
|
||||||
|
const cadFilter = {'terms': {'value.stream.source.contentType.keyword': cadTypes}};
|
||||||
|
shouldQueries.push(cadFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shouldQueries.length === 0) {
|
||||||
|
const noneFilter = {'match_none': {}};
|
||||||
|
filters.push(noneFilter);
|
||||||
|
} else {
|
||||||
|
const mediaTypeFilter = {'bool': {'should': shouldQueries}};
|
||||||
|
filters.push(mediaTypeFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (input.claimType === 'channel' || input.claimType === 'file') {
|
||||||
|
var query = '';
|
||||||
|
if (input.claimType === 'channel') {
|
||||||
|
query = 'certificateType';
|
||||||
|
} else if (input.claimType === 'file') {
|
||||||
|
query = 'streamType';
|
||||||
|
}
|
||||||
|
const claimTypeFilter = {'match': {'value.claimType': query}};
|
||||||
|
filters.push(claimTypeFilter);
|
||||||
|
}
|
||||||
if (filters.length > 0) {
|
if (filters.length > 0) {
|
||||||
const filterQuery = [
|
const filterQuery = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,9 @@ router.get('/', LighthouseControllers.info);
|
||||||
* - (query) size {Integer} The amount of results to return at max
|
* - (query) size {Integer} The amount of results to return at max
|
||||||
* - (query) from {Integer} The number to start from, good for pagination
|
* - (query) from {Integer} The number to start from, good for pagination
|
||||||
* - (query) nsfw {Boolean} If search should return nsfw content or not.
|
* - (query) nsfw {Boolean} If search should return nsfw content or not.
|
||||||
|
* - (query) contentType {String} Filter by MIME type.
|
||||||
|
* - (query) mediaType {String} Filter by media type, can be audio, video, image, application, text or cad.
|
||||||
|
* - (query) claimType {String} Return channels or files only, value can be 'channel' or 'file'.
|
||||||
* responses:
|
* responses:
|
||||||
* 200:
|
* 200:
|
||||||
* description: The search API returns an array of the found matching search items.
|
* description: The search API returns an array of the found matching search items.
|
||||||
|
|
Loading…
Reference in a new issue