Comments 17
Спасибо за статью, думаю начинающим разбиратся со сфинксом будет полезно.
Хотелось бы кое что добавить:
1. Морфология
Минусом морфологии сфинкса является стемминг (не все слова изменяются префиксами/суффиксами), а также его наличие всего для нескольких языков (русского, английского), что значительно сужает круг его применения.
Для себя решали задачу все-таки через полноценные словари словоформ (для php хорошо зарекоендовал себя phpMorphy, на питоне, соответвенно pyMorphy).
2. Словоформы
тоже достаточно спорная реализация — при построении индекса все слова из словоформы заменяются на один и тот же CRC32, соответственно после изменения в словоформах необходимо полностью перестроить индекс (у нас он достигает 300Гб).
Для себя решали отдельным справочником словоформ, которые заменяли слово непосредственно в запросе
Хотелось бы кое что добавить:
1. Морфология
Минусом морфологии сфинкса является стемминг (не все слова изменяются префиксами/суффиксами), а также его наличие всего для нескольких языков (русского, английского), что значительно сужает круг его применения.
Для себя решали задачу все-таки через полноценные словари словоформ (для php хорошо зарекоендовал себя phpMorphy, на питоне, соответвенно pyMorphy).
2. Словоформы
тоже достаточно спорная реализация — при построении индекса все слова из словоформы заменяются на один и тот же CRC32, соответственно после изменения в словоформах необходимо полностью перестроить индекс (у нас он достигает 300Гб).
Для себя решали отдельным справочником словоформ, которые заменяли слово непосредственно в запросе
Спасибо, и то и другое я кажется смогу применить. У вас на редкость ценный комментарий.
индексация словоформ по идее должна решатся включением index_exact_words
А как вы phpMorphy используете? Храните в отдельной таблице текст пропущенный через него или как-то по другому?
При индексации токенизируем текст и слова приводим к начальной форме (формам, если их несколько). Тоже самое при поиске — токенизируем строку запроса, слова приводим к начальной форме и передаем сфинксу.
При таком подходе решается проблема поиска по словоформам.
Единственный нюанс такого подхода — phpMorphy нужно указать хранить словари в разделяемой памяти, тк при чтении с диска на большой нагрузке упираемся в чтение, а при хранении в памяти скрипта уписаемся в потребление памяти.
Правда phpMorphy хранит может хранить словари только в одном сегменте памяти, так что если их много, то нужно будет дорабатывать его чтобы он умел работать с несколькими сегментами.
При таком подходе решается проблема поиска по словоформам.
Единственный нюанс такого подхода — phpMorphy нужно указать хранить словари в разделяемой памяти, тк при чтении с диска на большой нагрузке упираемся в чтение, а при хранении в памяти скрипта уписаемся в потребление памяти.
Правда phpMorphy хранит может хранить словари только в одном сегменте памяти, так что если их много, то нужно будет дорабатывать его чтобы он умел работать с несколькими сегментами.
Вы поаккуратнее про ТРАВКУ! По новому закону, так и Хабр закрыть могут =)
Основная проблема документации sphinx на мой взгляд малое количество примеров для большинства интересных настроек, сегодня постараюсь рассказать в примерах о них.
Зато это позволяет срубить денег на тех.поддержке и консультациях. :) Такая вот система монетизации.
Лично мне было сложно недавно прикручивать поиск с опечатками по статье Аксёнова к node.js + mongoDB. Прикрутил наполовину, как смог, но всё равно рад.
Так что мне истории успеха с применениех сфинкса безумно интересны.
>sphinxql — аналог протокола sql
sql — это язык, а не протокол
sql — это язык, а не протокол
Можно написать еще про Real Time index, сейчас столкнулся, забавная штука для мгновенной индексации изменений.
Большинство статей про реалтайм индексы в рунете наполнены откровенным непониманием как их использовать, прочитал 10 штук и мне показалось, что реалтайм индексы самая ненужная вещь в сфинксе. Эти статьи писали люди, которые не применяют эти индексы и дают примеры, которые просто оторваны от жизни и вводят читателей в заблуждение.
Если хватит сил напишу статьи про дельта и реалтайм индексы и как их правильно готовить.
Если хватит сил напишу статьи про дельта и реалтайм индексы и как их правильно готовить.
Sign up to leave a comment.
Улучшаем релевантность поиска в sphinxsearch