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

**URL:** https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633
**Category:** Feature
**Tags:** search
**Created:** [09.Октябрь.2019 23:22:15 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633 "2019-10-09T23:22:15Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Perry\_Eising](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/perry_eising/32/151717_2.png) [@Perry\_Eising](https://meta.discourse.org/u/Perry_Eising)
#### Post date: [09.Октябрь.2019 23:22:15 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/1 "2019-10-09T23:22:15Z")

</div>

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

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

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

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

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

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

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

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

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [10.Октябрь.2019 18:17:57 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/2 "2019-10-10T18:17:57Z")

</div>

> [@Perry\_Eising](#):
>
> Я пробовал следующий синтаксис, например `tags:answered -tags:redirects`. При поиске это действительно показывает все темы с тегом answered, но НЕ те, у которых есть тег **redirects**.

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

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

---

<div class="post-metadata">

### Author: ![Perry\_Eising](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/perry_eising/32/151717_2.png) [@Perry\_Eising](https://meta.discourse.org/u/Perry_Eising)
#### Post date: [10.Октябрь.2019 18:49:02 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/3 "2019-10-10T18:49:02Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [10.Октябрь.2019 18:56:12 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/4 "2019-10-10T18:56:12Z")

</div>

> [@Perry\_Eising](#):
>
> Думаю, попробую добавить все теги, которые не хочу искать, в группу тегов, как было предложено, и проверю это.

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

---

<div class="post-metadata">

### Author: ![Perry\_Eising](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/perry_eising/32/151717_2.png) [@Perry\_Eising](https://meta.discourse.org/u/Perry_Eising)
#### Post date: [10.Октябрь.2019 18:57:46 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/5 "2019-10-10T18:57:46Z")

</div>

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

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [13.Октябрь.2019 16:45:21 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/6 "2019-10-13T16:45:21Z")

</div>

Вы можете получить список тем, имеющих только один указанный тег, с помощью запроса в [Data Explorer](https://meta.discourse.org/t/32566?silent=true). Что-то вроде этого может подойти вам:

```sql
--[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

```

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [18.Июнь.2023 00:06:19 UTC](https://meta.discourse.org/t/wildcard-tags-in-searches-finding-topics-without-certain-tags/130633/7 "2023-06-18T00:06:19Z")

</div>


