2011-01-28 3 views
2

У нас есть php-приложение, у которого есть огромная база данных Mysql и индекс поиска Solr (с SolrPhpClient).Обновить или удалить данные из индекса Solr?

Прежде чем обновлять наш индекс (через Cron), мы удаляем все предметы, которые на данный момент отсутствуют. И только мы выбираем элементы из Mysql (на складе) и добавляем эти данные в Solr.

У меня есть идея, что существующий способ обновления нашего индекса поиска слишком дорог для производительности приложения. На самом деле мы переиндексируем все эти элементы (мы используем некоторые фильтры в схеме для русского слова stemning, нижний регистр и т. Д.), Вместо того, чтобы оставлять предметы вне запаса в индексе с флагом (inStock = 1).

В будущем, я полагаю, у нас будет более 100 000 позиций (возможно, больше) в индексе. Таким образом, этот способ обновления сделает наш индекс слишком медленным, а загрузка сервера слишком высока.

Не могли бы вы рассказать мне свои идеи об этой проблеме с позиций обновления индекса и выбора данных из него?

Спасибо за внимание ...

+0

Что такое "100 000 позиций"? Вы имеете в виду 100000 документов в индексе? –

+0

Пожалуйста, проверьте, помогает ли ответ на этот вопрос. http://stackoverflow.com/questions/1555610/solr-dih-how-to-handle-deleted-documents –

+0

2 Mauricio - Да, каждая строка в импортирующей таблице mysql является одним документом в нашем индексе Solr. –

ответ

1

Возможно, настраивая ваши удаления вы могли бы получить более высокую производительность. Вот псевдо-код:

  • Удалить только те элементы, которые «нет в наличии» И в индексе Solr
  • Добавить/обновить только пункты «на складе», но либо не существуют в Solr ИЛИ подсчета запасов неправильно.

Таким образом, вы не переустанавливаете каждый отдельный документ каждый раз, а только те, которые нуждаются в обновлении.

+0

Но какой способ лучше выполнять индексирование и делать поисковые запросы? Чтобы очистить весь индекс от свободных позиций или оставить эти документы в индексе с флагом? –

+0

Вам нужно будет протестировать - оно будет зависеть от размера и количества ваших документов.Как я уже сказал, это может дать лучшую производительность, но единственный способ - попробовать. –

1

Solr's DIH - это хорошее решение, так как вы, вероятно, в конечном итоге напишите много кода котельной плиты с PHP, который уже доступен с DIH. Хотя я не могу точно сказать об эффективности DIH по сравнению с вашим собственным кодом, мой опыт заключается в том, что DIH делает свою работу хорошо. 100K документов (при условии, что они не являются огромными документами), не очень большой. Я видел, что Solr обрабатывает миллионы документов без особых усилий.

Я не вижу необходимости иметь флаг «импорт-успех» в БД. Сольр сам сохраняет состояние.

Необходимо, чтобы в вашей таблице было добавлено дополнительное поле с меткой времени удаления и удалением. Solr будет использовать эту метку времени, чтобы выяснить, какой дельтой будет импортироваться. Флаг Soft-delete будет использоваться для удаления документов, которые были удалены.