Django полнотекстовый поиск с MySQL InnoDB - PullRequest
1 голос
/ 15 декабря 2009

Как настроить Django для полнотекстового поиска с MySQL-InnoDB. MySQL Myisam Engine поддерживает полнотекстовый поиск, но я буду использовать InnoDB. Это лучший способ использовать Sphinx? Если вы объясните свою конфигурацию, я буду признателен. (Кстати, мне интересно, как это работает с postgresql.)

Ответы [ 3 ]

4 голосов
/ 15 декабря 2009

Хотя его можно настроить для автоматического общения с MySQL, Sphinx действительно является отдельным инструментом для MyISAM или InnoDB. Он предлагает гораздо лучшую обработку и производительность, чем упрощенный полнотекстовый поиск в MyISAM, но, конечно, цена заключается в том, что запрос с условиями, основанными как на поиске, так и на базе данных одновременно, становится трудным. Вы можете сделать это, используя SphinxSE (механизм хранения), чтобы запрашивать и присоединяться через MySQL, но это не так гибко, как хранение в ядре базы данных, и объединения не будут работать хорошо.

В противном случае вы можете использовать гибридный подход с MyISAM и InnoDB. Поместите все свои канонические данные в соответствующие таблицы InnoDB и просто используйте MyISAM для хранения полнотекстовой поисковой приманки. Для нормальной работы вы просто касаетесь содержимого InnoDB; только когда вы выполняете полнотекстовый поиск, вам нужно присоединиться к таблицам MyISAM. Затем вам необходимо убедиться, что вы обновляете таблицы MyISAM из любого нового текста, вставленного в таблицы InnoDB после успешной транзакции.

Несмотря на то, что отсутствие поддержки транзакций в MyISAM рискует иногда сделать данные несовместимыми в условиях одновременности или ошибки (опасность, которая, очевидно, также относится к отдельному решению для хранения полнотекстового хранилища, такому как Sphinx, Lucene и др.), В действительности это не является большой проблемой. поскольку только поисковая приманка становится противоречивой, а не ваши фактические данные. Вы также можете воспользоваться возможностью по-другому обработать ваш полнотекстовый контент, например, применив тривиальное основание, поскольку MySQL не реализует это сам.

PostgreSQL имеет свой собственный встроенный полнотекстовый материал, основанный на операторе @@. Это не совсем зависит от скорости Sphinx, но намного опережает MyISAM FULLTEXT в функциях (например, стволовые, словари, лучшая обработка значений релевантности), и вы все равно можете свободно комбинировать его с другими условиями запроса.

2 голосов
/ 15 декабря 2009

Можете ли вы взглянуть на Стог сена

Поиск не должен быть сложным. Haystack позволяет вам написать свой поисковый код один раз и выбрать поисковую систему, на которой он будет работать. Благодаря знакомому API, который должен заставить любого Djangonaut чувствовать себя как дома, и архитектуре, которая позволяет вам обмениваться вещами по мере необходимости, именно так должен быть поиск.

1 голос
/ 15 декабря 2009

В прошлый раз, когда я собирался сделать такую ​​вещь, я хотел попробовать django-sphinx , так что это также может быть выбором для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...