2013-10-07 5 views
0

Я использую Solr 4.3. Я создал 4 осколка. Я настроил UniqueKey автоматически сформированное поле, как описано здесь:Solr Cluster + DataImportHandler: могу ли я получить автогенерированный идентификатор?

http://wiki.apache.org/solr/UniqueKey

Он отлично работает, если я использую фактический обработчик обновления для вставки документов (то есть, если я делаю HTTP POST к/обновлению с некоторыми данными JSON, уникальный ключ автоматически генерируется для каждого документа).

Если, однако, я использую DataImportHandler, чтобы вытащить некоторые документы из базы данных, они не добавлены в индекс, вместо этого я вижу предупреждение в журнале Solr, в котором говорится, что «поле обязательного идентификатора отсутствует».

Я знаю, что DataImportHandler не проходит через UpdateHandler добавить документы, но я надеялся, что эта функция будет работать для DIH, а также ...

Так что мой вопрос: кто-нибудь знает, как сделать работу автогенерация id для кластера Solr 4.3 при использовании DataImportHandler для вставки документов?

ответ

2

Ну, решение, которое я в конечном итоге использовала было это

  • создал собственный трансформатор в Java (на самом деле я уже использовал один - я считаю, что это быстрее, чем делать их в JS - другой вариант Solr предлагает)
  • Внутри трансформатора я довольно много делать то, что делает UUIDUpdateProcessorFactory: добавить

    @Override 
    public Object transformRow(Map<String, Object> row, Context context) { 
        row.put("id", UUID.randomUUID()); 
    
  • затем я удалил <updateRequestProcessorChain name="uuid"> тег из моего solrconfig.xml, и оставил только конфигурацию schema.xml по ссылке в вопросе

Смежные вопросы