Pergunta

Estou tentando indexar a tabela mysql no solr usando DataImportHandler, mas parece que não está indexando

dados-config.xml

 <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
      <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost/solr_tut" 
                  user="root" 
                  password=""/>
      <document>
        <entity name="product_id" 
                query="select product_id,name,description from products">
        </entity>
      </document>
    </dataConfig>

solrconfig.xml

<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />


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

Quando tento indexar no solr admin(http://localhost:8080/solr/dataimport?command=full-import) estou recebendo esta resposta

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">19</int>
</lst>
<lst name="initArgs">
 <lst name="defaults">
  <str name="config">data-config.xml</str>
 </lst>
</lst>
<str name="command">full-import</str>
<str name="status">idle</str>
<str name="importResponse"/>
<lst name="statusMessages">
   <str name="Total Requests made to DataSource">1</str>
   <str name="Total Rows Fetched">4</str>
   <str name="Total Documents Skipped">0</str>
   <str name="Full Dump Started">2014-01-10 10:38:00</str>
   <str name="">
     Indexing completed. Added/Updated: 0 documents. Deleted 0 documents.
   </str>
   <str name="Committed">2014-01-10 10:38:00</str>
   <str name="Total Documents Processed">0</str>
   <str name="Time taken">0:0:0.33</str>
</lst>
<str name="WARNING">
This response format is experimental. It is likely to change in the future.
</str>
</response>

Depois se eu pesquisar(http://localhost:8080/solr/select?q=*:*), estou obtendo 0 resultado.

Atualização-1: esquema.xml

Foi útil?

Solução

Você acabou de perder o mapeamento das colunas no conjunto de resultados para os campos dos documentos.Você precisa fazer isso dentro do entity elemento do seu data-config.xml.

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/solr_tut" 
              user="root" 
              password=""/>
  <document>
    <entity name="product_id" 
            query="select product_id,name,description from products">

 <!-- this is the place where you map the columns of your result set
      to fields of the new solr document -->

        <field column="PRODUCT_ID" name="id" />
        <field column="NAME" name="name" />
        <field column="DESCRIPTION" name="description" />

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

No seu caso, há um mapeamento vital que você perdeu. product_id para id.Solr pode detectar mapeamentos automaticamente, se o nome da coluna e o nome do campo no esquema forem iguais, conforme está escrito no wiki

No exemplo acima, existem mapeamentos de campos para campos Solr.É possível evitar totalmente as entradas de campos em entidades se os nomes dos campos forem iguais (maiúsculas e minúsculas) aos do esquema Solr.

Mas como dito, na sua situação não é esse o caso. product_id e id diferem.Desde o seu id campo é required esses documentos não entrarão no índice.

Mais informações podem ser encontradas no Wiki do Solr sobre o DataImportHandler ou no guia de referência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top