Content filters #144
4 changed files with 201 additions and 136 deletions
271
docs/index.html
271
docs/index.html
File diff suppressed because one or more lines are too long
|
@ -68,6 +68,30 @@
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "query",
|
||||||
|
"name": "contentType",
|
||||||
|
"description": "Filter by MIME type.",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "query",
|
||||||
|
"name": "mediaType",
|
||||||
|
"description": "Filter by media type, can be audio, video, image, application, text or cad.",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"in": "query",
|
||||||
|
"name": "claimType",
|
||||||
|
"description": "Return channels or files only, value can be 'channel' or 'file'.",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|
|
@ -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