Есть несколько хороших ответов, за которые я проголосовал, но вот еще несколько соображений, по моему мнению:
Независимо от того, по какому пути вы идете: индексирование текст имеет решающее значение для скорости. Там нет никакого способа обойти это. Единственный выбор заключается в том, насколько сложным должен быть ваш индекс для ограничений пространства, а также для функций поисковых запросов. Например, простая структура b-tree является быстрой и простой в реализации, но использует больше места на диске, чем структура trie .
Если вы по-настоящему не разберетесь во всех проблемах или не захотите сделать это как учебное упражнение, вам будет гораздо лучше использовать приложение, которое годами настраивалось на производительность.
Это может означать реляционные базы данных, такие как MySQL, даже если полнотекстовый является препятствием в базах данных, предназначенных для таблиц строк и столбцов. Для MySQL используйте механизм MyISAM для индексации и добавьте полнотекстовый индекс в столбец «blob». (Afaik, движок InnoDB по-прежнему не обрабатывает полнотекстовое индексирование, поэтому вам нужно использовать MyISAM). Для Postgresql вы можете использовать tsearch.
Для большей сложности реализации вы увидите лучшую производительность, интегрирующую приложения для индексирования, такие как Xapian , Hyper Estraier или (возможно) Lucene в ваша программа на C.
Помимо повышения производительности, эти приложения также предоставят вам важные функции, которые отсутствуют в полнотекстовом поиске MySQL, такие как определение слов, поиск по фразам и т. Д., Другими словами, реальные парсеры полнотекстовых запросов, которые не ограничиваются мышление SQL.