DataImportHandler não está indexando a tabela mysql no solr admin
-
21-12-2019 - |
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
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.