Определяем список стоп слов для sphinxsearch

Чтобы sphixsearch не тормозил и не жрал много ресурсов, необходимо выбрасывать из индексации стоп слова, задавая их в конфиге индексов директивой stopwords = /usr/local/sphinx/stopwords.txt

По большей части, это различные часто употребляемые предлоги, междометия и короткие словечки. Да можно конечно не индексировать совсем короткие слова, указав min_word_len, но у нас стоит задача, чтобы поиск работал на лету и с первого символа.

Но где ж их взять, стоп слова? А вычленить из лога запросов sphinx. Там указывается и запрос и время ушедшее на него.

Соберем всё за неделю в один файл:

Строки в лог файле запрсов выглядят так:

И их там до хрена.

Задача — выбрать только те, у которых запросы более 1 секунды и разделить их по именам индексов — таблиц. Здесь не обойтись без команды awk

Теперь мы знаем, какие из индексов баз тормозят больше всего.

А теперь пожестим. Определяем топ 100 самых часто употребляемых слов, которые вызывают тормоза:

Какая милая глазу и легко перевариваемая, особенно для новичков, команда… Сохраним топ 20 из этой сотни в файл words.txt

И так пройдемся по всем нашим базам и сохраним сколько надо. Выплюнем результаты без переносов строк в файл stopwords.txt

Если у нас был старый файл, то объединим результаты, чтобы ничего не потерялось:

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

Вот так.

Простая настройка и запуск Sphinx на debian для полнотекстового поиска на сайте