2012-06-12 5 views
0

Мы работаем над реализацией Solr на сайте для электронной коммерции. Сайт постоянно обновляется новыми данными либо обновлениями, содержащимися в существующей информации о продукте, либо добавлением нового продукта.Обновление индекса Solr при изменении данных о товаре

Мы используем его на asp.net mvc3-приложении с помощью solrnet.

Мы сталкиваемся с проблемой с индексацией. В настоящее время мы делаем фиксацию с помощью следующих действий:

private static ISolrOperations<ProductSolr> solrWorker; 
     public void ProductIndex() 
     { 
      //Check connection instance invoked or not 
      if (solrWorker == null) 
      { 
        Startup.Init<ProductSolr>("http://localhost:8983/solr/"); 
        solrWorker = ServiceLocator.Current.GetInstance<ISolrOperations<ProductSolr>>(); 

      } 
      var products = GetProductIdandName(); 
      solrWorker.Add(products); 
      solrWorker.Commit(); 

     } 

Хотя это только простое приложение теста, где мы вставили только название продукта и идентификатор в индекс Solr. Каждый раз, когда он запускается, новые продукты обновляются каждый раз и доступны при поиске. Я думаю, что это создает новый индекс данных в solr каждый раз, когда он работает? Поправьте меня если я ошибаюсь.

Мой вопрос:

  1. ли этот воссоздают индекс Solr данных в целом? Или просто обновите данные, которые были изменены/новые? Как? Даже если он только обновляет измененные/новые данные, как он знает, какие данные изменены? При большом наборе данных у этого должны быть некоторые проблемы.
  2. Каков альтернативный способ отслеживания изменений, произошедших после последнего фиксации, и есть ли способ добавить этот продукт в индекс Solr, который изменился.
  3. Что происходит, когда мы обновляем существующую запись в solr? Удаляет ли старые данные и вставляет новые и воссоздает весь индекс? Является ли этот ресурс интенсивным?
  4. Как большой розничный торговец электронной коммерции делает это с миллионами продуктов.

Какая стратегия поможет решить эту проблему?

ответ

3
  1. При выполнении обновления только эта запись удаляется и вставлена. Solr не обновляет записи. Другие записи не затронуты. Когда вы зафиксируете данные, новые сегменты будут созданы с использованием этих новых данных. Оптимизация данных оптимизируется в один сегмент.

  2. Вы можете использовать технику инкрементальной сборки для добавления/обновления записей после последней сборки. DIH предоставляет его out of the box, если вы обрабатываете его вручную с помощью заданий, вы можете сохранить timestamp и запустить сборки.

  3. У Solr нет операции с обновлением. Он выполнит удаление и добавление. Поэтому вам нужно снова использовать полные данные, а не только обновленные поля. Это не ресурсоемкий. Обычно используются только Commit и Optimize.

  4. Solr может обрабатывать любое количество данных. Вы можете использовать Sharding, если ваши данные превышают возможности обработки одной машины.

+0

Hi Jayendra, спасибо, что обратилась за помощью. –

+0

Я рассматриваю DIH и задаю другой вопрос. Может ли deltaImportQuery использоваться для извлечения данных из некоторой хранимой процедуры? –

+0

nope. Вам необходимо написать запросы в соответствии с вашими требованиями. Он выполняет обработку для хранения последней успешной метки времени сборки и использования ее в запросе. – Jayendra