Top.Mail.Ru
? ?

Entries by tag: jdbc

Solr + MySQL

"Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича, да взять сколь-нибудь развязанное, какая у Балтазара Балтазаровича, да, пожалуй, прибавить к этому еще дородности Ивана Павловича — я бы тогда тотчас же решилась. А теперь — поди подумай!"
Н. В. Гоголь, "Женитьба"
Замечательная штука -- искать инструкции по установке чего-нибудь эдакого в интернете. Часто приходится собирать информацию по кускам из двух-трёх описаний одного и того же. Вот и со связкой Solr + MySQL получилось тоже самое.
За основу были взяты два описания: "Using Solr / Lucene for full text search with MySQL DB"  и "Apache Solr MySQL Sample Data Config". Плюс к этому множество форумов и багрепортов, ибо и Solr, и MySQL -- штуки местами удивительные и непредсказуемые.
Свои нечеловеческие эксперименты в области full-text поиска я начал с создания базы данных и таблицы, которые и будут являться хранилищем требуемых данных:
mysql> CREATE DATABASE solrdb;
mysql> USE solrdb;
mysql> CREATE TABLE `jos_content` (
> `id` bigint(20) NOT NULL AUTO_INCREMENT,
> `state` tinyint(3) unsigned NOT NULL DEFAULT '0',
> `title` char(10) DEFAULT NULL,
> `introtext` text,
> `ftext` text,
> PRIMARY KEY (`id`)
> ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

mysql> INSERT INTO jos_content VALUES(null, 1, a', 'intro1', 'ft1');
mysql> INSERT INTO jos_content VALUES(null, 1, 'b', 'intro2', 'ft2');
mysql> INSERT INTO jos_content VALUES(null, 1, 'c', 'intro3', 'ft3');
 
Следующий пункт программы -- это добыча подходящего MySQL JDBC-драйвера. Драйвера с версией младше 5.1.7 не подходят, поскольку не умеют работать с UTF8, в случае их использования JDBC-драйвер сгенерирует исключение java.sql.SQLException с загадочным обоснованием вида: "Unknown initial character set index '192' received from server. Initial client character set can be forced via the 'characterEncoding' property.". Во избежание проблем берётся самый последний из предлагаемого списка драйверов.

После того как драйвер найден, его необходимо положить в правильное место. "Правильным местом" является каталог /lib контейнера сервлетов или web-сервера, а не одноимённый каталог в домашней директории Solr. В противном случае ищите в логах запись про отсутствующий драйвер.

Дальше действия выполняются почти, как указано в инструкциях.
1. Создаётся конфигурационный xml-файл для работы с базой данных, я назвал его dataimport.xml. Поскольку я развлекался с прилагаемым к Solr демо-приложением и, опять же, прилагаемом контейнером сервлетов Jetty, то файл я разместил в <SOLR_HOME>/example/solr/conf. Вот его содержимое:
<?xml version="1.0" encoding="UTF-8"?>
  <dataConfig>
    <dataSource type="JdbcDataSource"
      driver="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost/solrdb"
      user="root"
      password="11111111"/>

    <document name="doc">
        <entity name="jos_content" query="select * from jos_content WHERE state=1">
        <field column="id" name="id" />
        <field column="title" name="title" />
        <field column="introtext" name="introtext" />
        <field column="ftext" name="ftext" />
      </entity>
  </document>
</dataConfig>

2. В конфигурационный файл <SOLR_HOME>/example/solr/conf/solrconfig.xml добавляются настройки для выполнения импорта данных из базы:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">dataimport.xml</str>
  </lst>
</requestHandler>

3. В том же каталоге правлю schema.xml, меняю(добавляю) текущее содержимое тэгов fields, uniqueKey и defaultSearchField:
<fields>
  <field name="id" type="string" indexed="true" stored="true" required="true"/>
  <field name="title" type="text" indexed="true" stored="true" required="true"/>
  <field name="introtext" type="text" indexed="true" stored="true" required="true"/>
  <field name="ftext" type="text" indexed="true" stored="true" required="true"/>
  <dynamicField name="*" type="ignored" />
</fields>

<uniqueKey>id</uniqueKey>

<defaultSearchField>ftext</defaultSearchField>

4. Перезапускаю Solr: java -jar start.jar

5. Проверяю состояние и импортирую данные.
http://localhost:8983/solr/dataimport
http://localhost:8983/solr/dataimport?command=delta-import

6. Выполняю запрос.
http://localhost:8983/solr/select/?q=id:1

Tags:

Profile

Image
Imagecpplang
cpplang

Latest Month

January 2020
S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 

Tags

Page Summary

Syndicate

RSS Atom

Comments

  • cpplang
    11 Jul 2012, 07:04
    Спасибо =) я знаю intuit, очень крутой сервис. тока я по ключам его настроила => а задача была по сертификатам =(, у меня как раз не выходит центр сертификации установить на мой сервер.

    но статья…
  • cpplang
    10 Jul 2012, 10:08
    Ничего подобного, наоборот, удивляюсь.

    Кстати, есть такая классная тётка, Лапонина Ольга Германовна, она в МГУ преподаёт. У неё есть учебник по протоколам безопасного сетевого взаимодействия, и там…
  • cpplang
    10 Jul 2012, 07:20
    чувствую нотки сарказма в ваших словах...

    нет, на винде.
  • cpplang
    9 Jul 2012, 20:15
    ipsec? вот это да, круть какая. не на FreeBSD случаем?
  • cpplang
    9 Jul 2012, 07:19
    на данный момент, пытаюсь настроить ipsec между машинами.

    Извините за глупые вопросы, если что.
Powered by LiveJournal.com
Designed by Emile Ong
Image