2012-01-27 3 views
1

Я пытаюсь индексировать данные из базы данных в Solr, используя DIH.Простейшая индексация Solr DIH

Так что я изменил два конфигурационных файлов следующим образом:

solrconfig.xml:

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

данных config.xml:

<dataConfig> 
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="****"/> 
    <document> 
     <entity name="source_scellee" query="select * from source_scellee"> 
     </entity> 
    </document> 
</dataConfig> 

source_scellee быть имя моей таблицы в моей тестовой базе данных. Он содержит много полей.

Очевидно, что я пытаюсь запустить ничего, кроме простого теста. При запуске http://localhost:8983/solr/dataimport?command=full-import&clean=false&commit=true я получаю следующее результат:

<str name="Full Dump Started">2012-01-27 12:27:01</str><str name="">Indexing completed. Added/Updated: 4 documents. Deleted 0 documents.</str><str name="Committed">2012-01-27 12:27:02</str> 
<str name="**Total Documents Failed**">4</str> 

Помимо без предупреждения, ни ошибки на логи сервера. 4 - это количество записей внутри таблицы «source_scellee». Но в нем говорится, что все документы терпят неудачу.

Если у меня есть запрос от http://localhost:8983/solr/admin/ никаких результатов не найдено! Как я могу это решить? (":" не показывается результатов)

Благодарим за помощь!

---- редактировать --- Я добавил эти строки в моей schema.xml:

<field name="ID" type="int" indexed="true" stored="true" /> 
    <field name="reference_catalogue" type="string" indexed="true" stored="true"/> 
    <field name="reference_capsule" type="string" indexed="true" stored="true"/> 
    <field name="organisme_certificateur" type="string" indexed="true" stored="true" /> 
    <field name="reference_certificat" type="string" indexed="true" stored="true" /> 
    <field name="duree_d_utilisation" type="string" indexed="true" stored="true" /> 
    <field name="activite_nominale" type="string" indexed="true" stored="true"/> 
    <field name="activite_minimale" type="string" indexed="true" stored="true"/> 
    <field name="activite_maximale" type="string" indexed="true" stored="true"/> 
    <field name="coffret" type="boolean" indexed="true" stored="true"/> 
    <field name="dispositif_medical" type="boolean" indexed="true" stored="true"/> 
    <field name="forme_speciale" type="boolean" indexed="true" stored="true" /> 
    <field name="exemption_cpa" type="boolean" indexed="true" stored="true"/> 
    <field name="marquage_ce" type="boolean" indexed="true" stored="true"/> 
    <field name="element_cible" type="boolean" indexed="true" stored="true"/> 

Однако результат все тот же: никаких результатов при запросе (я пытался перезапустить Solr, и повторное индексирование все также)

------ второй редактировать --- Я попытался динамический импорт Теперь мой данных config.xml выглядит следующим образом:

<document> 
     <entity name="source_scellee" query="select * from source_scellee"> 
      <field column="ID" name="ID_i" /> 
      <field column="reference_catalogue" name="reference_catalogue_s" /> 
      <field column="reference_capsule" name="reference_capsule_s" /> 
      <field column="organisme_certificateur" name="organisme_certificateur_s" /> 
      <field column="reference_certificat" name="reference_certificat_s" /> 
      <field column="duree_d_utilisation" name="duree_d_utilisation_s" /> 
      <field column="activite_nominale" name="activite_nominale_s" /> 
      <field column="activite_minimale" name="activite_minimale_s" /> 
      <field column="activite_maximale" name="activite_maximale_s" /> 
      <field column="coffret" name="coffret_b" /> 
      <field column="dispositif_medical" name="dispositif_medical_b" /> 
      <field column="forme_speciale" name="forme_speciale_b" /> 
      <field column="exemption_cpa" name="exemption_cpa_b" /> 
      <field column="marquage_ce" name="marquage_ce_b" /> 
      <field column="element_cible" name="element_cible_b" /> 
     </entity> 
    </document> 

ответ

1

1.) Вы можете посмотреть на странице статистики, чтобы увидеть, сколько документы индексируются прямо сейчас: http://localhost:8983/solr/admin/stats.jsp

2.) Результат вашего поиска зависит от вашего schema.xml, потому что это определяется, как документы индексируются/сохраняются, какие поля обрабатываются и как обрабатываются поисковые запросы во время запроса. Пожалуйста, взгляните на этот файл или разместите определение поля из schema.xml, а также схему/схему из вашей таблицы source_scellee. Имеются ли одноименные столбцы и поля?

// Edit: Это должно работать, если coulmname и filedname одинаково:

<document> 
     <entity name="source_scellee" 
       pk="ID" 
       query="select * from source_scellee"> 

     </entity> 
    </document> 

оказывает NULL значение в данной проблеме?

который зависит от области назначения.

Являются ли ваши бегущие solr в tomcat или что-то вроде этого? Взгляните на выход Java EE Container, например, catalina.out или около того.

+0

thx, проверьте мой вопрос редактирование. – zg2pro

+0

похоже, что вы сопоставляете идентификатор столбца таблицы с полем ID_i Solr, но для ID_i нет идентификатора filed-идентификатора, только для ID. Если имена столбцов RDBMS и Solr-Filed-Names одинаковы, вам не нужно сопоставлять поля в файле-config.xml. Взгляните на мое редактирование. Кстати: уникальный идентификатор и: вам не нужно сохранять поля, если фокус использует полнотекстовый поиск. –

+0

Итак, чтобы динамически назначать тип поля для моих полей, я должен прямо переименовать имена столбцов с помощью _i или _s в РСУБД? Идентификатор уникален. – zg2pro

0

Я уверен, что проблема заключается в том, как DIH пытается сопоставить поля. Спасибо за добавление информации из файла схемы ... Тем не менее, я считаю, что вы добавили конфигурацию, которая должна быть добавлена ​​отдельно как schema.xml, так и data-config.xml для DIH.

Основано на Full Import Example из Вирджинии Solr, я бы попробовал следующее.

schema.xml

<field name="ID" type="int" indexed="true" stored="true" /> 
<field name="reference_catalogue" type="string" indexed="true" stored="true"/> 
<field name="reference_capsule" type="string" indexed="true" stored="true"/> 
<field name="date_de_creation" type="date" indexed="true" stored="true"/> 
<field name="organisme_certificateur" type="string" indexed="true" stored="true" /> 
<field name="reference_certificat" type="string" indexed="true" stored="true" /> 
<field name="duree_d_utilisation" type="string" indexed="true" stored="true" /> 
<field name="activite_nominale" type="string" indexed="true" stored="true"/> 
<field name="activite_minimale" type="string" indexed="true" stored="true"/> 
<field name="activite_maximale" type="string" indexed="true" stored="true"/> 
<field name="coffret" type="int" indexed="true" stored="true"/> 
<field name="dispositif_medical" type="int" indexed="true" stored="true"/> 
<field name="forme_speciale" type="int" indexed="true" stored="true" /> 
<field name="exemption_cpa" type="int" indexed="true" stored="true"/> 
<field name="marquage_ce" type="int" indexed="true" stored="true"/> 
<field name="element_cible" type="int" indexed="true" stored="true"/> 

данных config.xml

<dataConfig> 
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="****"/> 
    <document> 
     <entity name="source_scellee" query="select * from source_scellee"> 
      <field column="ID" name="ID"/> 
      <field column="reference_catalogue" name="reference_catalogue"/> 
      <field column="reference_capsule" name="reference_capsule"/> 
      <field column="date_de_creation" name="date_de_creation"/> 
      <field column="organisme_certificateur" name="organisme_certificateur"/> 
      <field column="reference_certificat" name="reference_certificat"/> 
      <field column="duree_d_utilisation" name="duree_d_utilisation"/> 
      <field column="activite_nominale" name="activite_nominale"/> 
      <field column="activite_minimale" name="activite_minimale"/> 
      <field column="activite_maximale" name="activite_maximale"/> 
      <field column="coffret" name="coffret"/> 
      <field column="dispositif_medical" name="dispositif_medical"/> 
      <field column="forme_speciale" name="forme_speciale"/> 
      <field column="exemption_cpa" name="exemption_cpa"/> 
      <field column="marquage_ce" name="marquage_ce"/> 
      <field column="element_cible" name="element_cible"/> 
     </entity> 
    </document> 
</dataConfig> 

Существует способ, чтобы настроить schema.xml динамически добавлять поля, которые он сталкивается с помощью некоторых именования. Подробности см. В статьях Dynamic Fields в Wiki для Solr и некоторые примеры того, как это можно сделать.

+0

Да, Я борюсь с этим сопоставлением между schema.xml и data-config.xml ... но все равно не могу заставить его работать: S Я тоже пробовал это решение, также даже попытался удалить некоторые поля из моей базы данных = D Я буду переименовывать свои поля таблицы с помощью суффиксов, чтобы иметь возможность попробовать функцию динамических полей, я держу вас в курсе. Thx – zg2pro

+0

Что делать, если вы держите его простым и только пытаетесь выбрать и индексировать первые два столбца из таблицы, идентификатора и справочного каталога (или просто идентификатора и простого строкового поля), только определяя эти два поля для данных -config.xml-файл? Поскольку проблема может быть в ваших данных, и вам может понадобиться использовать трансформатор - http://wiki.apache.org/solr/DataImportHandler#Transformer для обработки данных, поступающих в поля solr. –

+0

имеет значения NULL в данных? – zg2pro

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