Мы создаем приложение, которое потребует от нас индексировать данные для каждого из наших пользователей, чтобы мы могли обеспечить полнотекстовый поиск по их данным.Вот несколько примечательных моментов, связанных с приложением:
A) Данные для каждого пользователя совершенно не связаны с любым другим пользователем.Это дает нам несколько преимуществ:
- мы можем сохранять наши индексы небольшими по размеру.
- объединение / сопоставление фрагментированного индекса займет меньше времени.
- если некоторые индексы становятсянедоступный по какой-либо причине (коррупция?), затрагиваются только эти пользователи.На других пользователей это не влияет, и услуга для них доступна.
B) Каждый пользователь может иметь несколько разных типов данных.Мы хотим хранить каждый тип в отдельных папках по тем же причинам, что и выше.
Итак, наша иерархия индексов будет выглядеть примерно так:
/user1/type1/<index files><br>
/user1/type2/<index files><br>
/user2/type1/<index files><br>
/user3/type3/<index files>
C) Часто, вероятно,с каждой итерацией мы будем добавлять «типы» данных, которые можно индексировать.
Поэтому мы хотим иметь эффективный / программный способ добавления схем для разных «типов».Мы хотели бы избежать фиксированной схемы для индексации.Мне нравится бессмысленный способ индексации вещей в Lucene.
D) Пользователи могут запускать поисковые запросы, которые будут искать: - в пределах определенного «типа» для этого пользователя - во всех типах для этого пользователя: в этомВ случае, если мы хотим запустить параллельный запрос, как Lucene.( ParallelMultiSearcher )
E) Нам требуется обновление индекса в реальном времени. Это необходимо.
F) Мы планируем разделить наш индекс на несколько машин.Для этого мы также хотим:
, если осколок становится недоступным, затрагиваются только те пользователи, данные которых находятся в этом осколке.Другие пользователи получают бесперебойное обслуживание.
Мы рассматривали Lucene, Sphinx и Solr, чтобы сделать это.Вот что мы нашли:
- Сфинкс: нет эффективного способа сделать A, B, C, F. Или есть?
- Luecne: Все выглядит возможным, так как это оченьнизкий уровень.Но мы должны написать обертки для F и создать коммуникационный уровень между веб-сервером и поисковым сервером.
- Solr: Не уверен, что мы можем легко сделать A, B, C.Можем ли мы?
Итак, мой вопрос, какое программное обеспечение является лучшим для вышеуказанных требований?Я больше склоняюсь к Solr, а затем к Lucene, если мы получим все требования.