# Как настроить поиск только по точным совпадениям?

**URL:** https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198
**Category:** Support
**Created:** [28.Июнь.2021 05:17:09 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198 "2021-06-28T05:17:09Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Nacho\_Caballero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nacho_caballero/32/130189_2.png) [@Nacho\_Caballero](https://meta.discourse.org/u/Nacho_Caballero)
#### Post date: [28.Июнь.2021 05:17:09 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/1 "2021-06-28T05:17:09Z")

</div>

Я заметил, что при некоторых поисковых запросах результатов нет:

 ![CleanShot 2021-06-28 at 07.00.30@2x](https://global.discourse-cdn.com/meta/original/3X/9/3/9364bf49daa4fc3f4c46bc61dcf1270cc2bb6fcb.png)

Однако, если сузить поиск, например, до конкретной темы, то нужный результат находится:

 ![CleanShot 2021-06-28 at 07.01.06@2x](https://global.discourse-cdn.com/meta/original/3X/f/a/faa76ff164672f7af9b4aedc015817d775756ca1.png)

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

Вторая мысль была, что это может быть связано со стоп-словами, но я изменил файл app.yml, чтобы [обрезать словарь стоп-слов испанского языка](https://meta.discourse.org/t/including-stop-words-when-searching/127134/4?u=nacho_caballero):

```plaintext
ls -l /usr/share/postgresql/13/tsearch_data/spanish.stop
-rw-r--r-- 1 root root 0 May 12 06:37 /usr/share/postgresql/13/tsearch_data/spanish.stop
                       ☝️

```

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

---

<div class="post-metadata">

### Author: ![tgxworld](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgxworld/32/106117_2.png) [@tgxworld](https://meta.discourse.org/u/tgxworld)
#### Post date: [29.Июнь.2021 00:58:05 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/3 "2021-06-29T00:58:05Z")

</div>

Привет, @Nacho_Caballero!

Можешь предоставить пример текста и поисковый запрос, которые воспроизводят проблему? Я вижу это на изображении, но видно только фрагмент.

---

<div class="post-metadata">

### Author: ![Nacho\_Caballero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nacho_caballero/32/130189_2.png) [@Nacho\_Caballero](https://meta.discourse.org/u/Nacho_Caballero)
#### Post date: [29.Июнь.2021 07:32:38 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/4 "2021-06-29T07:32:38Z")

</div>

Спасибо, Алан.

Вот содержимое того конкретного сообщения:

> > [@post:46](#):
> >
> > ¿No lo usamos nunca después de “pensar que” o hay una regla?
> 
> Действительно, после « **pienso que** » это не используется, потому что то, что вы утверждаете, что думаете, является реальностью, а не возможностью.
> 
> С другой стороны, мы используем сослагательное наклонение, когда применяем эту же конструкцию, но в отрицательной форме: « **No pienso que haya** mucha gente en el mercado hoy».
> 
> Надеюсь, это ответит на ваш вопрос, но если вам понадобятся дополнительные подробности, пожалуйста, дайте знать, и я с радостью помогу.
> 
> С уважением! :smiley:

Однако, чтобы воспроизвести это поведение здесь, вам пришлось бы установить локаль на испанский и урезать словарь :sweat_smile:

Я тестировал это на локальном тестовом сайте Discourse, который у меня запущен, но не смог воспроизвести проблему. Думаю, это связано с тем, что сайт практически пуст. Я считаю, что эта проблема возникает только при наличии большого количества сообщений (у меня сейчас около 68 тысяч).

Я мог бы попробовать другие варианты, связанные со словарем PostgreSQL, но не уверен, как войти в мой образ Docker при запуске тестовой установки. Есть ли аналог команды `launcher enter app`?

В идеале должен быть способ игнорировать стоп-слова. Например, искать это предложение в вашем сообщении:

 ![CleanShot 2021-06-29 at 09.12.42@2x](https://global.discourse-cdn.com/meta/original/3X/8/0/80d36a9ef54ce7eb90f5827286a905e46d4e6813.png)

---

<div class="post-metadata">

### Author: ![Yashi12](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yashi12/32/225822_2.png) [@Yashi12](https://meta.discourse.org/u/Yashi12)
#### Post date: [29.Июнь.2021 08:47:00 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/5 "2021-06-29T08:47:00Z")

</div>

@Nacho_Caballero, привет! Можешь, пожалуйста, подсказать, какой сейчас алгоритм поиска использует Discourse? Это поможет мне разобраться с проблемой.

---

<div class="post-metadata">

### Author: ![Nacho\_Caballero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nacho_caballero/32/130189_2.png) [@Nacho\_Caballero](https://meta.discourse.org/u/Nacho_Caballero)
#### Post date: [29.Июнь.2021 09:46:30 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/6 "2021-06-29T09:46:30Z")

</div>

Спасибо, Яши.

Я предполагаю, что Discourse использует стандартный алгоритм полнотекстового поиска Postgres. Мне кажется, что единственный способ обеспечить точное совпадение при использовании кавычек (без стемминга и без игнорирования стоп-слов) — это использование [простого словаря](https://stackoverflow.com/a/51132212/355567) :thinking:

---

<div class="post-metadata">

### Author: ![Yashi12](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yashi12/32/225822_2.png) [@Yashi12](https://meta.discourse.org/u/Yashi12)
#### Post date: [30.Июнь.2021 08:38:31 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/8 "2021-06-30T08:38:31Z")

</div>

Спасибо, @Nacho_Caballero.

Я изучу алгоритм полнотекстового поиска в Postgres.

---

<div class="post-metadata">

### Author: ![Overgrow](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/overgrow/32/478189_2.png) [@Overgrow](https://meta.discourse.org/u/Overgrow)
#### Post date: [15.Октябрь.2021 22:10:50 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/10 "2021-10-15T22:10:50Z")

</div>

Возможно ли выполнить поиск по точному совпадению?

Пример:

В данный момент поиск по запросу «flow» к сожалению возвращает «flower» как наиболее релевантный результат..

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [21.Октябрь.2021 03:04:31 UTC](https://meta.discourse.org/t/how-to-enforce-exact-matches-when-searching/195198/11 "2021-10-21T03:04:31Z")

</div>

Попробуйте использовать кавычки при поиске, например, ищите «flow», а не flow.
