Индексирование и поиск MySQL с помощью Solr - PullRequest
4 голосов
/ 04 августа 2010

(я вставил 'в XML ниже, чтобы он отображался)

Привет всем, я хочу проиндексировать свою таблицу базы данных MySQL с помощью solr. Я установил необходимые компоненты / адаптеры Java и т. Д. Моя база данных называется 'test_db', а таблица в ней называется 'table_tb'. Таблица содержит 2 столбца (поля)

- Поле 1 называется «ID» и представляет собой целое число автоинкрементного первичного ключа. Поле 2 называется «COLA» и имеет текст

В таблице есть две строки (записи) ID = 1 и ID = 2 с текстом, каждый из которых соответствует второму столбцу. Я установил следующие файлы conf (они находятся в правильных каталогах):

Данные-config.xml

<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/test_db"
              user="username"
              password="db_pwd"/>

<document name="doc">

<entity name="test_tb" query="select ID from test_tb">
        <field column="ID" name="ID" />
        <field column="COLA" name="COLA" />
</entity>

  </document>
</dataConfig>

solrconfig.xml

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

schema.xml

 <fields>
        <field name="ID" type="int" indexed="true" stored="true" required="true"/>
        <field name="COLA" type="string" indexed="true" stored="true" required="true"/>
 </fields>

 <uniqueKey>ID</uniqueKey>

"[URL]:8983/solr/dataimport?command=full-import" в моем браузере я получаю следующие выходные данные:

(1) вывод в браузере (xml)

<response>
−
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</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">2</str>
<str name="Total Documents Skipped">0</str>
<str name="Full Dump Started">2010-08-03 16:15:51</str>
−
<str name="">

Indexing completed. Added/Updated: 0 documents. Deleted 0 documents.
</str>
<str name="Committed">2010-08-03 16:15:51</str>
<str name="Optimized">2010-08-03 16:15:51</str>
<str name="Total Documents Processed">0</str>
<str name="Total Documents Failed">2</str>
<str name="Time taken ">0:0:0.32</str>
</lst>
−
<str name="WARNING">
This response format is experimental.  It is likely to change in the future.
</str>
</response>

Предложение о том, что 2 записи были прочитаны, но не проиндексированы

Вывод на стороне сервера

WARNING: Error creating document : SolrInputDocument[{ID=ID(1.0)={1}}]
org.apache.solr.common.SolrException: Document [null] missing required field: id


WARNING: Error creating document : SolrInputDocument[{ID=ID(1.0)={2}}]
org.apache.solr.common.SolrException: Document [null] missing required field: id

Кто-нибудь знает, что я делаю неправильно?

Заранее спасибо за любую помощь !!!

Ответы [ 3 ]

3 голосов
/ 05 августа 2010

В другом месте документа присутствовало поле 'id'.Я закомментировал это, и это сработало.

2 голосов
/ 24 апреля 2011

Вам необходимо синхронизировать: sche.xml и то, что находится в data-config.xml (определение полей должно быть одинаковым)

0 голосов
/ 08 апреля 2014
<entity name="test_tb" query="select ID from test_tb">
        <field column="ID" name="ID" />
        <field column="COLA" name="COLA" />
</entity>

это должен быть query = "select * from test_tb", я думаю.

если вы выполните запрос select id из test_tb, вы получите только один столбец, а вам нужно два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...