Подстановочные знаки в тегах при поиске — как найти темы без определённых тегов?

У меня следующая ситуация:

У меня есть категория, содержащая множество тем (более 900), все из которых имеют один и тот же тег, например answered, который мы используем для отслеживания сообщений, на которые был дан ответ.

Многие из них также содержат другие теги: deployment, cli, api и так далее, чтобы обозначить «тему» вопроса.

Как найти все темы в моей категории, которые имеют только тег answered, но ни один из остальных?

Я пробовал следующий синтаксис, например tags:answered -tags:redirects; при поиске это действительно показывает все элементы с тегом answered, но исключает те, у которых есть тег redirects.

Однако, чтобы применить это к моей ситуации, мне пришлось бы перечислять все теги, которые нужно исключить, по отдельности — а их у меня много.

Существует ли способ использовать подстановочные знаки при поиске по тегам? Что-то вроде: tags:answered -tags: *?

Если нет, есть ли другой способ получить список элементов, у которых есть только тег answered, но нет никаких других?

Спасибо за ваши мысли по этому вопросу.

Это единственный способ, который я вижу для исключения тегов из поиска.

Возможно искать группы тегов, используя модификатор категории с слагом группы тегов. Например, если у вас есть группа тегов под названием ‘topic status’, вы можете искать её теги с помощью #topic-status, но исключить теги таким образом нельзя, поэтому -#topic-status не работает.

1 лайк

Спасибо, @simon — думаю, я попробую добавить все теги, которые не хочу искать, в группу тегов, как было предложено, и проверить это :flexed_biceps:

Извините, я не был так ясен, как мог бы быть. Если бы можно было исключить группу тегов из поиска, этот подход сработал бы, но я не вижу способа исключить группу тегов из результатов поиска.

2 лайка

Ой, я неправильно понял. Значит, это невозможно — вообще?

Вы можете получить список тем, имеющих только один указанный тег, с помощью запроса в Data Explorer. Что-то вроде этого может подойти вам:

--[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 лайк