DataImportHandler indiziert die MySQL-Tabelle im Solr-Administrator nicht
-
21-12-2019 - |
Frage
Ich versuche, die MySQL-Tabelle in Solr mit DataImportHandler zu indizieren, aber es scheint keine Indizierung zu geben
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">
</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>
Wenn ich versuche, im Solr-Administrator zu indizieren(http://localhost:8080/solr/dataimport?command=full-import
) Ich bekomme diese Antwort
<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>
Wenn ich danach suche(http://localhost:8080/solr/select?q=*:*
), erhalte ich 0 Ergebnis.
Update-1: schema.xml
Lösung
Sie haben gerade die Zuordnung der Spalten im Ergebnissatz zu den Dokumentfeldern verpasst.Sie müssen dies innerhalb der tun entity
Element von Ihnen 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>
In Ihrem Fall gibt es eine wichtige Zuordnung, die Sie übersehen haben. product_id
Zu id
.Solr kann Zuordnungen automatisch erkennen, wenn der Spaltenname und der Name des Feldes im Schema gleich sind, wie im Wiki geschrieben
Im obigen Beispiel gibt es Zuordnungen von Feldern zu Solr-Feldern.Es ist möglich, die Feldeinträge in Entitäten vollständig zu vermeiden, wenn die Namen der Felder mit denen im Solr-Schema identisch sind (Groß- und Kleinschreibung spielt keine Rolle).
Aber wie gesagt, in Ihrer Situation ist das nicht der Fall. product_id
Und id
unterscheiden sich.Seit deinem id
Feld ist required
Diese Dokumente werden nicht in den Index aufgenommen.
Weitere Informationen finden Sie hier im Solr-Wiki über den DataImportHandler oder im Referenzhandbuch.