Я изучаю полнотекстовые поисковые системы для django. Должна быть проста в установке, быстрая индексация, быстрое обновление индекса, а не блокирование при индексировании, быстрый поиск.Полнотекстовый поиск django: Mysql не так уж плохо? (vs sphinx, xapian)
После прочтения многих веб-страниц, я положил в коротком списке: Mysql MYISAM полнотекстового, djapian/питон-Xapian и Джанго-сфинкс я не выбирал Lucene, потому что кажется сложным, ни сен, как это имеет меньше возможностей, чем djapian/django-spĥinx (например, взвешивание полей).
Затем я сделал несколько тестов, чтобы сделать это, я собрал много бесплатных книг в сети, чтобы создать таблицу базы данных с 1 485 000 записей (id, title, body), каждая запись составляет около 600 байтов. Из базы данных я также создал список из 100 000 существующих слов и перетасовал их для создания списка поиска. Для тестов я сделал 2 прогона на моем ноутбуке (4Go RAM, Dual core 2.0Ghz): первый, сразу после перезагрузки сервера, чтобы очистить все кеши, второй выполняется juste после этого, чтобы проверить, насколько хороши результаты кэширования , Вот «дома из» Результаты тестов:
1485000 records with Title (150 bytes) and body (450 bytes)
Mysql 5.0.75/Ubuntu 9.04 Fulltext :
==========================================================================
Full indexing : 7m14.146s
1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:11.553524
next run : 0:00:00.168508
Mysql 5.5.4 m3/Ubuntu 9.04 Fulltext :
==========================================================================
Full indexing : 6m08.154s
1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:09.553524
next run : 0:00:20.316903
1 thread, 100000 searchs with single word randomly taken from database :
First run : 9m09s
next run : 5m38s
1 thread, 10000 random strings (random strings should not be found in database) :
just after the 100000 search test : 0:00:15.007353
1 thread, boolean search : 1000 x (+word1 +word2)
First run : 0:00:21.205404
next run : 0:00:00.145098
Djapian Fulltext :
==========================================================================
Full indexing : 84m7.601s
1 thread, 1000 searchs with single word randomly taken from database with prefetch :
First run : 0:02:28.085680
next run : 0:00:14.300236
python-xapian Fulltext :
==========================================================================
1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:26.402084
next run : 0:00:00.695092
django-sphinx Fulltext :
==========================================================================
Full indexing : 1m25.957s
1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:30.073001
next run : 0:00:05.203294
1 thread, 100000 searchs with single word randomly taken from database :
First run : 12m48s
next run : 9m45s
1 thread, 10000 random strings (random strings should not be found in database) :
just after the 100000 search test : 0:00:23.535319
1 thread, boolean search : 1000 x (word1 word2)
First run : 0:00:20.856486
next run : 0:00:03.005416
Как вы можете видеть, Mysql не так уж плохо для полнотекстового поиска. Кроме того, кеш запросов очень эффективен.
Mysql мне кажется хорошим выбором, так как нет ничего, что можно было бы установить (мне нужно просто написать небольшой скрипт для синхронизации таблицы производства Innodb с таблицей поиска MyISAM), и поскольку мне действительно не нужна расширенная функция поиска, например, и т. д. ...
Возникло вопрос: Что вы думаете о Mysql полнотекстовой поисковой системе против sphinx и xapian?