Are specific terms ignored from searches?

I’m having a few difficulties with the search functionality today.

We have an automated process we creates topics based on a lecture from a course, an example may be;

About ‘Implementing Health & Damage’

I found myself wanting to reduces the maximum number of characters for a topic length and decide I’d do a quick search to see how many of our automated topics are quite long, to get a feel for the suitable max length.

If I search using the above, I’ll get result, but I need the search to be a little more general than that, so I’ve tried searching for;

About ’

…knowing that is the start of the format we always use. When I do, I don’t get any results, if I add another word after the apostrophe I do get results. I assumed at that point it was related to the apostrophe, but nope, if I search for just;

About

I get no results, yet if I search for;

Test

I do get results! This indicates there isn’t a limitation on the number of words as a minimum for a search, and we have a 3 character limit set for the term, so it isn’t that. The only thing I can think of is that there is a list of “words” that are being ignored from a search, yet I don’t think we’ve set these up.

Any information would be appreciated. :slight_smile:


Update

I have also tested this with “because”, “and”, “the” and these all produce no results, so I’m feeling that there is a list of “common words” which are being ignored, but because I don’t have access to these via the settings I cannot alter them, and, cannot perform the search I want to perform.

Yes, I believe these are “stop” words — see:

I’m not sure if things have changed much since two years ago, but there doesn’t seem to be an easy way to change those.

Hi Kris,

Thanks for the reply.

Yeah, I thought as much. It’s a pain on this occasion as in this specific case the word does have value.

I guess using DataExplorer wouldn’t get around this either?


Update

Actually, via DataExplorer it works. I guess a full text search isn’t carried out when querying the topic title field.

Looks like a work-around :slight_smile:

Я сам с этим столкнулся. Это… крайне раздражает. Есть ли какие-то обновления, можно ли это изменить прямо сейчас? «About» точно не должно быть запрещённым словом для поиска! Вот как я с этим столкнулся здесь, на Meta:

Я был в категории «Плагины» и заметил, что в некоторых темах плагинов ответы автоматически удаляются, а в других — нет. Поэтому я решил проверить, есть ли объяснение этому в теме «About» в этой категории. Такого объяснения не оказалось, и я собирался задать вопрос, но сначала хотел создать запрос на новую функцию для плагина (в теме, где ответы автоматически удаляются :grinning_face_with_smiling_eyes:). Поэтому я вернулся к основному списку категорий и оставил свой ответ. Затем снова зашёл в список категорий и попытался найти тему About the Plugin category. Поскольку это была старая, но закреплённая тема, и я уже её прочитал, она больше не отображалась в списке (её переместили на место, соответствующее её дате). :roll_eyes: Ладно, без проблем, я просто поищу её… Но, конечно, ничего не вышло.

Главная проблема в том, что в интерфейсе нет никакого предупреждения или сообщения об этом. Поиск просто молча не находит результат. Так что, если это невозможно исправить из-за ограничений Postgres, я настоятельно рекомендую добавить в Discourse функцию, которая уведомляет пользователей о том, что определённые слова фильтруются при поиске! Иначе это довольно запутанно.

Я тоже удивлен, что предлог «about» есть в текущем списке стоп-слов Postgres, но вот он:

Один из обходных путей — искать закрепленные темы в категории

in:pinned #support

Спасибо, Джефф! Я не знал, что можно искать по закрепленным темам. В функциях Discourse всегда есть что-то новое и интересное. :smiley:

Но… есть ли мысли о том, как предупредить бедного пользователя, который ищет и не находит ничего, хотя знает, что результаты должны быть? Теперь, когда я вижу весь список, он действительно довольно длинный…

Хорошая идея — выдавать предупреждение, если ваш поиск состоит только из стоп-слов. Насколько сложно это реализовать, @tgxworld?

Мы не хотим хардкодить список, поэтому нам нужен способ запросить PostgreSQL и получить ответ: «Все ли эти слова являются стоп-словами?»

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

Возможно, если результатов поиска нет, мы выполняем эту проверку, чтобы определить, состоит ли запрос только из стоп-слов? Тогда мы запускаем дополнительную проверку только в том случае, если результаты всё равно плохие. Согласно списку стоп-слов, например, если вы ищете «doing should now».

В худшем случае мы могли бы дублировать список и выполнять проверку на стороне сервера — это всего 127 строк, но это было бы не очень элегантно. Возможно, при запуске мы могли бы запросить список стоп-слов и закэшировать его?

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

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

Существуют файлы для разных языков

Понятно. Почти все личные местоимения во всех формах, а также глагол to be, плюс несколько служебных слов, таких как or, only, when и т. д. Почти всё можно обойти при поиске; например, нам в основном не нужны персоны в предложении. Но, конечно, это делает базу данных более управляемой.

Но хорошо знать, что она построена также по языкам. Спасибо.