diff --git a/components/filters/tags.vue b/components/filters/tags.vue index 525c306..5c88926 100644 --- a/components/filters/tags.vue +++ b/components/filters/tags.vue @@ -12,25 +12,25 @@ - +
+ +
+
new RegExp(search.value, 'i')); const order = ref('priority'); -// const showActorTags = ref(true); +const showActorTags = ref(!!pageActor); const priorityTags = [ 'anal', @@ -173,13 +177,13 @@ const priorityTags = [ 'lesbian', ]; +const isActorTagsAvailable = computed(() => props.actorTags && (props.filters.actors.length > 0 || pageActor) && !pageStash); + const groupedTags = computed(() => { - /* - const tags = showActorTags.value && props.actorTags && (props.filters.actors.length > 0 || pageActor) + // can't show actor tags inside stash, because both require a join, and manticore currently only supports one + const tags = showActorTags.value && isActorTagsAvailable.value ? props.actorTags : props.tags; - */ - const tags = props.tags; const selected = tags.filter((tag) => props.filters.tags.includes(tag.slug)); const filtered = tags.filter((tag) => !props.filters.tags.includes(tag.slug) diff --git a/src/scenes.js b/src/scenes.js index 0a28feb..811d47a 100644 --- a/src/scenes.js +++ b/src/scenes.js @@ -406,10 +406,10 @@ function curateOptions(options) { } // function curateFacet(results, field, count = 'count(distinct id)') { -function curateFacet(results, field, count = 'count(*)') { +function curateFacet(results, field) { return results - .find((result) => result.columns[0][field] && result.columns[1][count]) - ?.data.map((row) => ({ key: row[field], doc_count: row[count] })) + .find((result) => result.columns[0][field] && (result.columns[1]['count(distinct id)'] || result.columns[1]['count(*)'])) + ?.data.map((row) => ({ key: row[field], doc_count: row['count(distinct id)'] || row['count(*)'] })) .filter((row) => !!row.key) || []; } @@ -436,6 +436,7 @@ async function queryManticoreSql(filters, options, _reqUser) { :yearsFacet: :actorsFacet: :tagsFacet: + :actorTagsFacet: :channelsFacet: :studiosFacet:; show meta; @@ -469,12 +470,10 @@ async function queryManticoreSql(filters, options, _reqUser) { weight() as _score `)); - /* - // manticore only supports one joined table, so we can't use it inside stashes; probably not needed anyway (stashes only need global tags?) + // manticore only supports one joined table, so we can't use it inside stashes builder .leftJoin('scenes_tags', 'scenes_tags.scene_id', 'scenes_.id') .groupBy('scenes.id'); - */ } if (filters.query) { @@ -581,12 +580,10 @@ async function queryManticoreSql(filters, options, _reqUser) { yearsFacet: options.aggregateYears ? knex.raw('facet effective_year as years_facet order by effective_year desc limit ?', [aggSize]) : null, actorsFacet: options.aggregateActors ? knex.raw('facet scenes.actor_ids as actors_facet distinct id order by count(*) desc limit ?', [aggSize]) : null, // don't facet tags associated to other actors, actor ID 0 means global - tagsFacet: options.aggregateTags ? knex.raw('facet scenes.tag_ids as tags_facet order by count(*) desc limit ?', [aggSize]) : null, - /* + tagsFacet: options.aggregateTags ? knex.raw('facet scenes.tag_ids as tags_facet distinct id order by count(*) desc limit ?', [aggSize]) : null, actorTagsFacet: options.aggregateTags && !filters.stashId // eslint-disable-line no-nested-ternary ? knex.raw(`facet IF(IN(scenes_tags.actor_id, ${[0, ...filters?.actorIds || []]}), scenes_tags.tag_id, 0) as actor_tags_facet distinct id order by count(*) desc limit ?`, [aggSize]) : null, - */ channelsFacet: options.aggregateChannels ? knex.raw('facet scenes.channel_id as channels_facet distinct id order by count(*) desc limit ?', [aggSize]) : null, studiosFacet: options.aggregateChannels ? knex.raw('facet scenes.studio_id as studios_facet distinct id order by count(*) desc limit ?', [aggSize]) : null, maxMatches: config.database.manticore.maxMatches, @@ -606,13 +603,10 @@ async function queryManticoreSql(filters, options, _reqUser) { const results = await utilsApi.sql(curatedSqlQuery); - // console.log(util.inspect(results, null, Infinity)); - - const years = curateFacet(results, 'years_facet', 'count(*)'); + const years = curateFacet(results, 'years_facet'); const actorIds = curateFacet(results, 'actors_facet'); const tagIds = curateFacet(results, 'tags_facet'); - // const actorTagIds = curateFacet(results, 'actor_tags_facet'); - const actorTagIds = []; + const actorTagIds = curateFacet(results, 'actor_tags_facet'); const channelIds = curateFacet(results, 'channels_facet'); const studioIds = curateFacet(results, 'studios_facet');