Top.Mail.Ru
? ?

Entries by tag: jetty

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:

Solr + Resin

Экспериментирую с Solr. Полнотекстовая поисковая платформа Solr написана на Java и, если верить документации, должна запускаться как отдельное серверное приложение внутри любых контейнеров сервлетов. Последнее утверждение я и проверял. Приложение без всяких проблем уживается с Jetty, который используется в качестве контейнера сервлетов для демонстрационных приложений Solr. В дополнение к этому я попробовал использовать Solr совместно с сервером Resin. Собственно всё, что я сделал -- выполнил инструкции, предлагаемые для использования Solr совместно с Apache Tomcat.
И так, что я сделал:
  1. Через консоль администратора Resin выполнил deploy solr.war из каталога <SOLR_HOME>/webapps. Здесь <SOLR_HOME> -- это абсолютный путь к каталогу с Solr.
  2. Запустил приложение: http://<host>:<port>/solr. В результате в каталоге web-приложений Resin (у меня это /var/www/webapps) появился каталог solr.
  3. В этом каталоге отредактировал файл WEB-INF/web.xml -- раскомментировал строчки:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/Path/To/My/solr/Home/solr/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

В качестве значения env-entry-value указал SOLR_HOME.
Последнее, что я сделал -- это вызвал solr повторно для выполнения некоторых полезных действий, например, для индексации данных: http://<host>:<port>/solr/dataimport?command=full-import

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">23</int>
  </lst>
  <lst name="initArgs">
    <lst name="defaults">
      <str name="config">dataimport.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">3</str>
    <str name="Total Documents Skipped">0</str>
    <str name="Full Dump Started">2011-05-27 16:28:32</str>
    <str name="">
      Indexing completed. Added/Updated: 3 documents. Deleted 0 documents.
    </str>
    <str name="Committed">2011-05-27 16:28:33</str>
    <str name="Optimized">2011-05-27 16:28:33</str>
    <str name="Total Documents Processed">3</str>
    <str name="Time taken ">0:0:0.544</str>
  </lst>
  <str name="WARNING">
    This response format is experimental. It is likely to change in the future.
  </str>
</response>

//TODO: Написать в склерозник инструкцию Solr + MySQL

Profile

Image
Imagecpplang
cpplang

Latest Month

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

Tags

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