Существует множество различных поисковых систем с открытым исходным кодом, которые созданы именно для того, что вы пытаетесь сделать. Solr, Elastic Search, Xapian, Whoosh, Haystack (для Django) и другие. Есть и другие посты на С.О. и в других местах, где есть преимущества использования одного против другого, но ваши требования достаточно просты, чтобы любое из них было более чем удовлетворительным (и легко масштабируемым с минимальными усилиями, если ваш проект взлетает, что всегда приятно знать). Итак, посмотрите на их примеры и посмотрите, какой из них выглядит наиболее интуитивно понятным - возможно, Solr - самый популярный и единственный, с которым я работал, но Elastic Search использует тот же самый популярный бэкэнд Lucene, и его, очевидно, гораздо легче получить и работает, поэтому я бы начал там.
Что касается фактической реализации, вы захотите проиндексировать каждый стих как отдельный «документ», если вы хотите вернуть один стих (или просто номер стиха). Поисковая система обрабатывает ранжирование результатов на основе релевантности (обычно, если вам интересно, с использованием алгоритма tf / idf).
Способ, которым я бы обработал курсив и красный текст, состоит в том, чтобы включить некоторую разметку в текст (то есть обернуть фразу в одинарные звездочки для курсива, двойные звездочки для красного), а затем сказать анализатору игнорировать эти символы - может быть, в рамках, который вы в конечном итоге выберете, может быть более простой способ, так что возьмите его с собой. Запросы, охватывающие несколько стихов, более сложны, но ответ, вероятно, будет включать в себя индексацию каждой целой главы как документа, а не (или, может быть, в дополнение к? Я должен подумать об этом больше) каждого стиха.
Слово предостережения - если вы не знакомы с индексированием поиска, даже для чего-то, разработанного так, чтобы быть гибким, как Elastic Search, вероятно, все же потребуется некоторое время и усилия для настройки, поэтому, если вы абсолютно нужно , чтобы быстро это запустить и запустить, и вы уже знакомы с MySQL, я полагаю, он может работать (он выполняет полнотекстовый поиск). Но это, безусловно, не лучший инструмент для работы, поэтому, если это проект, в который вы вложили деньги, вы поблагодарите себя позже, если потратите немного времени на изучение одной из этих поисковых систем. Как указывали другие, это может быть излишним с точки зрения количества текста, с которым вы имеете дело, но оно будет чрезвычайно гибким в том, как вы можете искать по этому тексту, который, кажется, вам нужен. Например, добавление других требований позже будет очень простым (например, вы можете позволить людям ограничить свой поиск только совпадениями в красном тексте).