Tags curinga em buscas - encontrar tópicos sem certas tags?

Tenho a seguinte situação:

Tenho uma categoria contendo muitos tópicos (mais de 900), todos com a mesma tag, digamos respondido, que usamos para acompanhar as postagens que receberam resposta.

Muitos também contêm outras tags: implantação, cli, api, e assim por diante, para denotar o “tema” da pergunta.

Como posso encontrar todos os tópicos na minha categoria que possuem apenas a tag respondido, mas nenhuma das outras?

Já tentei a seguinte sintaxe, por exemplo tags:respondido -tags:redirecionamentos ao pesquisar, o que realmente me dá todas as coisas com a tag respondido, mas NÃO aquelas com a tag redirecionamentos.

Mas para aplicar isso à minha situação, teria que listar todas as tags que NÃO quero encontrar individualmente — e tenho muitas.

Existe uma maneira de usar curingas nas buscas por tags? Algo como: tags:respondido -tags: *?

Se não, existe outra maneira de obter uma lista de coisas que possuem APENAS a tag respondido e nenhuma das outras?

Obrigado pelas suas reflexões sobre isso.

Essa é a única maneira que consigo ver de excluir tags de uma pesquisa.

É possível pesquisar por grupos de tags usando o modificador de categoria com o slug do grupo de tags. Por exemplo, se você tiver um grupo de tags chamado ‘status do tópico’, pode pesquisar por suas tags com #status-topico, mas as tags não podem ser excluídas dessa forma, então -#status-topico não funciona.

1 curtida

Obrigado @simon - acho que vou tentar adicionar todas as tags que não quero pesquisar em um grupo de tags, como sugerido, e testar isso :muscle:

Desculpe, não fui tão claro quanto poderia ter sido. Se fosse possível excluir um grupo de tags da pesquisa, essa abordagem funcionaria, mas não vejo nenhuma maneira de excluir um grupo de tags dos resultados da pesquisa.

2 curtidas

Ah, eu entendi errado. Então não é possível — de jeito nenhum?

Você pode obter uma lista de tópicos que possuem apenas uma tag específica usando uma consulta no Data Explorer. Algo como este exemplo pode funcionar para você:

--[params]
-- string :tag_name

with tagged_topics AS (
SELECT 
topic_id
FROM topic_tags
JOIN tags
ON tags.id = topic_tags.tag_id
WHERE tags.name = :tag_name
),
counts AS (
SELECT
COUNT(id) AS tag_count,
tagged_topics.topic_id
FROM topic_tags
JOIN tagged_topics
ON tagged_topics.topic_id = topic_tags.topic_id
GROUP BY tagged_topics.topic_id
)

SELECT
c.topic_id
FROM counts c
JOIN topics t
ON t.id = c.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
AND c.tag_count = 1
1 curtida