DataIstporthandler non indicizza la tabella MySQL in SOLR admin
-
21-12-2019 - |
Domanda
Sto cercando di indicizzare la tabella MySQL in SOLR utilizzando DataIstporthandler, ma non sembra indicizzare
dati-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 provo ad indicizzare in SOLR Admin (http://localhost:8080/solr/dataimport?command=full-import
) Sto ricevendo questa risposta
<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>
.
Dopo se cerco (http://localhost:8080/solr/select?q=*:*
), sto ottenendo 0 risultato.
Aggiornamento-1: schema.xml
Soluzione
Hai appena perso la mappatura delle colonne nel risultato impostato sui campi documenti. È necessario farlo all'interno dell'elemento entity
del 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>
.
Nel tuo caso c'è una mappatura vitale che ti sei perso. product_id
to id
. SOLR può autodirect Mappings, se il nome della colonna e il nome del campo nello schema sono uguali, come scritto nel wiki
.Nell'esempio precedente, ci sono mappature di campi ai campi SOLR. È possibile evitare totalmente le voci del campo in entità se i nomi dei campi sono uguali (custodia non importa) come quelli in SOLR Schema.
Ma come detto, nella tua situazione che non è il caso. product_id
e id
differiscono. Dal momento che il campo id
è required
quei documenti non lo effettueranno nell'indice.
Ulteriori informazioni possono essere trovate Nel wiki del solr Informazioni su DataIstporthandler o nel riferimento Guida .