Как импортировать данные из одного ядра solr в другой экземпляр solr

Мне нужно импортировать данные из одного экземпляра Solr в другой экземпляр Полный импорт данных и индексов.

Я искал и провел несколько раз в Google, но не нашел подходящего решения. Эта ссылка аналогичный вопрос, но я не мог найти правильный ответ.

Я новичок в Solr, надеюсь, я помогу.

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

Мой вопрос здесь:

  • Поддерживает ли существующий Solr импорт полного набора данных или каких-либо инструментов? или
  • Мне нужно написать какой-нибудь пользовательский обработчик данных для этой цели?

Заранее спасибо за любую помощь или информацию.


person Gautam    schedule 11.05.2016    source источник
comment
Нужно ли поддерживать ежедневный параллелизм между двумя экземплярами или просто создать еще один индекс? Потому что вы можете просто скопировать все ядро ​​​​(с индексом) на новый сервер и solr start -s CORELOC, которое должно это сделать. Это для версии 5.+. Ниже никогда не использовал. Так что не в курсе.   -  person darthsidious    schedule 12.05.2016
comment
Мне просто нужно скопировать с одного сервера на другой сервер.   -  person Gautam    schedule 13.05.2016
comment
Вы пытались скопировать весь индекс с одного сервера на другой и использовать этот индекс для своего нового экземпляра?   -  person darthsidious    schedule 17.05.2016
comment
Я не пробовал это .. это сработает, но все еще не работает.   -  person Gautam    schedule 18.05.2016


Ответы (3)


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

  1. Брандмауэр, блокирующий весь http(s) трафик между QA и производством
  2. Снимки невозможны из-за интенсивной записи и тайм-аута установки Zookeeper.

Поэтому я создал решение, просто извлекая все документы на производственном сервере с помощью обработчика select и выгружая их в файл xml, копируя файлы на сервер QA, а затем помещая их в место, где их можно было бы забрать при импорте. Чтобы заставить это работать, у меня ушло слишком много времени, что было связано как с моим недостатком знаний о SOLR, так и с тем, что большинство примеров в Интернете неверны, и все просто копируют друг друга. Поэтому я делюсь своим решением здесь.

Мой скрипт для сброса документов:

#!/bin/bash
SOURCE_SOLR_HOST='your.source.host'
SOLR_CHUNK_SIZE=10000
DUMP_DIR='/tmp/'

indexesfile='solr-indexes.txt'
for index in `cat $indexesfile`; do
  solrurl="http://${SOURCE_SOLR_HOST}:8983/solr/$index/select?indent=on&q=*:*&wt=xml"
  curl "${solrurl}&rows=10" -o /tmp/$index.xml
  numfound=`grep -i numfound /tmp/$index.xml | sed -e 's/.*numFound=\"\([0-9]*\)\".*/\1/'`
  chunks=$(expr $numfound / $SOLR_CHUNK_SIZE )
  for chunk in $( eval echo {0..$chunks}); do
    start_at=$(expr $chunk \* $SOLR_CHUNK_SIZE )
    curl "${solrurl}&rows=${SOLR_CHUNK_SIZE}&start=${start_at}" -o ${DUMP_DIR}solr/${index}_${chunk}.xml
  done
  rm /tmp/$index.xml
done

Он читает индексы для дампа из файла solr-indexes.txt, поэтому вы можете определить там все индексы.

Во время одного из моих поисков я остановился на этом вопросе, и ответы здесь немного помогли мне с импортом, но не полностью. Видите ли, примеры Duvo и Segfaulter не работают, если вы скопируете их в SOLR. Например, тег requestHandler игнорируется SOLR, если вы не используете правильный регистр.

Это правильный формат того, что я добавил в solrconfig:

  <lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-7.5.0.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-extras-7.5.0.jar" />
  <requestHandler class="org.apache.solr.handler.dataimport.DataImportHandler" name="/dataimport">
  <lst name="defaults">
      <str name="config">data-config.xml</str>
  </lst>
  </requestHandler>

Для data-config.xml я использовал что-то похожее на это:

<dataConfig>
  <dataSource type="FileDataSource" />
  <document>
    <entity
      name="yourindexhere"
      processor="FileListEntityProcessor"
      baseDir="/solr-import/"
      fileName="yourindexhere_.*"
      preImportDeleteQuery="*:*"
      recursive="false"
      rootEntity="false"
      dataSource="null">
      <entity
        name="file"
        processor="XPathEntityProcessor"
        url="${yourindexhere.fileAbsolutePath}"
        xsl="xslt/updateXml.xsl"
        useSolrAddSchema="true"
        stream="true">
      </entity>
    </entity>
  </document>
</dataConfig>

Я скопировал все дампы в каталог /solr-import/ и применил приведенные выше настройки ко всем без исключения конфигурациям индексов. Через пользовательский интерфейс я инициировал полный импорт, но вы также можете запустить его с помощью запроса на импорт данных.

Преобразование xsl выполняется файлом updateXml.xsl по умолчанию, поэтому он распознает вывод дампа, созданный SOLR, и автоматически преобразует его в схему индекса. По крайней мере, если схема между производством и контролем качества одинакова. ;)

Также FileListEntityProcessor использует регулярное выражение, чтобы иметь возможность принимать несколько файлов. Это было необходимо, так как некоторые из наших индексов содержат миллионы элементов, и если вы попытаетесь преобразовать их все сразу, процесс Java быстро исчерпает память. Поэтому я разделил их на 10000 строк в файле, что, как я обнаружил, обеспечивает наилучшую производительность.

person Art van Scheppingen    schedule 05.03.2019

Вы можете использовать Solr DataImportHandler для импорта данных из одного экземпляра Solr в другой.

  1. Обновите файл solrconfig.xml, чтобы настроить параметры DataImportHandler.

    <requesthandler class="org.apache.solr.handler.dataimport.DataImportHandler" name="/dataimport">
    <lst name="defaults">
        <str name="config">solr-data-config.xml</str>
    </lst>
    

  2. Enter the following in data-config.xml.

    <dataConfig>
    <document>
       <entity name="solr_doc" processor="SolrEntityProcessor" 
        query="mimeType:pdf" 
        url="http://your.solr.server:8983/solr/your-core">
       </entity>
    </document>
    </dataConfig>
    
  3. Перейдите в целевую консоль администратора Solr, нажмите DataImport, выберите «solr_doc» в раскрывающемся списке Entity и нажмите Execute.

Я нашел следующие ссылки полезными

http://blog.trifork.com/2011/11/08/importing-data-from-another-solr/ https://wiki.apache.org/solr/DataImportHandler#SolrEntityProcessor

person duvo    schedule 25.10.2017

Это возможно из моего исследования, которое я вижу. Вы можете использовать обработчики импорта данных для извлечения данных из одного экземпляра SOLR в другой, однако, сказав это, он сможет индексировать только те поля, которые хранится в исходном индексе.

Дополнительные сведения можно найти в следующем блоге: http://blog.trifork.com/2011/11/08/importing-data-from-another-solr/

используя XPathEntityProcessor в Обработчик импорта данных

person segFaulter    schedule 06.03.2017
comment
Добро пожаловать в StackOverflow! Пожалуйста, вытащите любой соответствующий контент из ссылки и добавьте его в свой ответ. Ссылки в порядке, но ваш ответ должен быть полезен и без них, если страница будет удалена. - person Aaron; 06.03.2017