2014-10-02 3 views
0

я сделал следующие настройки для dataimport от около 20 MDB файлов с помощью :Solr изменение dataimport DATASOURCE динамически

<?xml version="1.0" encoding="UTF-8" ?> 
<dataConfig> 
<dataSource name="a" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/main.mdb;memory=false" /> 

<dataSource name="a1" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/1.mdb;memory=false" /> 
<dataSource name="a2" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/2.mdb;memory=false" /> 
<dataSource name="a3" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/3.mdb;memory=false" /> 
<dataSource name="a4" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/4.mdb;memory=false" /> 
<!-- and so on --> 

<document> 
    <entity name="Book" dataSource="a" 
      query="select bkid AS id, bkid AS BookID,bk AS BookTitle, betaka AS BookInfo, cat as cat from 0bok"> 
        <field column="id" name="id"/> 
        <field column="BookID" name="BookID"/> 
        <field column="BookTitle" name="BookTitle"/> 
        <field column="cat" name="cat"/>  
     <entity name="Category" dataSource="a" 
       query="select name as CatName, catord as CatWeight, Lvl as CatLevel from 0cat where id = ${Book.CAT}"> 
        <field column="CatName" name="CatName"/> 
        <field column="CatWeight" name="CatWeight"/> 
        <field column="CatLevel" name="CatLevel"/> 
     </entity> 

     <entity name="Pages" dataSource="a5" onError="continue" 
       query="SELECT nass AS PageContent, page AS pageNum FROM b${Book.ID} ORDER BY page"> 
       <field column="PageContent" name="PageContent" /> 
       <field column="PageNum" name="PageNum" /> 
       <entity name="Titles" dataSource="a5" onError="continue" 
        query="SELECT * FROM t${Book.ID} WHERE id = ${Pages.PAGE} ORDER BY sub"> 
         <field column="ID" name="TitleID"/> 
         <field column="TIT" name="PageTitle"/> 
         <field column="SUB" name="TitleWeight"/> 
         <field column="LVL" name="TitleLevel"/> 
       </entity> 
     </entity> 


    </entity> 
    </document> 
</dataConfig> 

В каждый раз, когда я любил импортировать из другого источника данных, я должен был изменить атрибут DATASOURCE вручную как объекты Pages, так и Titles, а затем выполнить dataimport без очистки. Теперь с более чем 600 мегабайтами файлов, это не разумный вариант. Есть ли способ сделать цикл внутри конфига? Другими словами: есть основная сущность или файлы mdb, которые обрабатывают все названия книг и категории, тогда каждая книга имеет свой собственный файл mdb с его идентификатором, например, 245.mdb для книги id 245. Поэтому мне нужно изменить dataSource для страниц и титров динамически.

+0

Кажется мне, вы должны иметь одну .mdb с книгой, категорией и таблицами страниц там для всех ваших данных. Наличие отдельного файла для страниц каждой книги не масштабируется по мере добавления дополнительных книг. Кроме того, можете ли вы перенести все эти данные в нечто иное, чем Microsoft Access? – orangepips

+0

@orangepips Я уже пытался найти какой-либо инструмент, который конвертирует базу данных MS Access в MySQL, но это та же идея, мне нужно манипулировать более чем 600 mdb-файлами вручную! В настоящее время, если у меня нет прямого решения Solr, я планирую создать приложение PHP, которое автоматизирует процесс, но мне нужно будет знать, как сделать нечистый dataimport через HTTP. – SaidbakR

ответ

1

Вы не можете создать dataSources в цикле, но я считаю, что вы можете передать информацию о данных в a parameter variable. Таким образом, возможно, вы можете перебрать свою коллекцию вне Solr, а затем запустить DIH с правильным источником в качестве переменной параметра.

Просто убедитесь, чтобы запустить DIH в синхронном режиме, чтобы избежать различных вызовов шаговых друга на друг (я думаю, что пары являются syncMode)

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