DataImportHandler가 solr admin에서 mysql 테이블을 인덱싱하지 않습니다.
-
21-12-2019 - |
문제
DataImportHandler를 사용하여 solr에서 mysql 테이블을 인덱싱하려고 하는데 인덱싱되지 않는 것 같습니다.
데이터 구성.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>
solr admin에서 색인을 생성하려고 할 때(http://localhost:8080/solr/dataimport?command=full-import
) 나는 이런 응답을 받고 있어요
<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>
내가 검색하면(http://localhost:8080/solr/select?q=*:*
), 결과가 0개입니다.
업데이트-1: 스키마.xml
해결책
결과 집합의 열을 문서 필드에 매핑하는 것을 놓쳤습니다.그 기간 내에 하셔야 합니다 entity
당신의 요소 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>
귀하의 경우에는 놓친 중요한 매핑이 하나 있습니다. product_id
에게 id
.위키에 작성된 것처럼 Solr는 열 이름과 스키마의 필드 이름이 동일한 경우 매핑을 자동 감지할 수 있습니다.
위의 예에는 필드가 Solr 필드에 매핑되어 있습니다.필드 이름이 Solr 스키마의 이름과 동일하면(대소문자는 중요하지 않음) 엔터티의 필드 항목을 완전히 피할 수 있습니다.
그러나 말했듯이, 귀하의 상황에서는 그렇지 않습니다. product_id
그리고 id
다릅니다.당신 이후로 id
필드는 required
해당 문서는 색인에 포함되지 않습니다.
더 많은 정보를 확인하실 수 있습니다 DataImportHandler에 대한 Solr의 Wiki에서 또는 참조 가이드에서.
제휴하지 않습니다 StackOverflow