Инструкция по интеграции MongoDB и Solr

В этой инструкции я покажу, как интегрируются MongoDB и Solr. Все будет происходить на Windows-системе, но это же самое можно делать и на Linux (конечно же предпочтительнее). Расширенные настройки я буду пропускать, т.к. сама по себе настройка этих программных комплексов - тема для нескольких статей.

MongoDB - один из признанных лидеров в NoSQL СУБД. Apache Solr - очень быстрый поисковый движок. Интеграция этих технологий даст очень крутой результат по поиску в документах базы данных.

Установка MongoDB

  1. Качаем MongoDB.
  2. Устанавливаем пакет.
  3. Создаем папку для баз данных: C:\data\db.
  4. Запускаем сервер MongoDB:
    C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe
    Сообщение waiting for connections говорит о том, что все успешно запустилось.
  5. Пробуем подключиться к серверу:
    C:\Program Files\MongoDB\Server\3.2\bin\mongo.exe
    Создаем базу данных:
    use solrdb

Заполняем базу MongoDB тестовыми данными

  1. Скачиваем файл с данными: https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json.
  2. Импортируем файл в базу:
    mongoimport.exe --db solrdb --collection test --drop --file ~/downloads/primer-dataset.json
  3. Снова подключаемся к базе и проверяем:
    C:\Program Files\MongoDB\Server\3.4\bin>mongo.exe
    MongoDB shell version v3.4.0
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.0
    Server has startup warnings:
    2016-12-12T10:31:05.517+0300 I CONTROL  [initandlisten]
    2016-12-12T10:31:05.517+0300 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2016-12-12T10:31:05.522+0300 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    2016-12-12T10:31:05.523+0300 I CONTROL  [initandlisten]
    > use solrdb
    switched to db solrdb
    > db.test.findOne()
    {
            "_id" : ObjectId("584e5229ee1968c280df30cd"),
            "address" : {
                    "building" : "1007",
                    "coord" : [
                            -73.856077,
                            40.848447
                    ],
                    "street" : "Morris Park Ave",
                    "zipcode" : "10462"
            },
            "borough" : "Bronx",
            "cuisine" : "Bakery",
            "grades" : [
                    {
                            "date" : ISODate("2014-03-03T00:00:00Z"),
                            "grade" : "A",
                            "score" : 2
                    },
                    {
                            "date" : ISODate("2013-09-11T00:00:00Z"),
                            "grade" : "A",
                            "score" : 6
                    },
                    {
                            "date" : ISODate("2013-01-24T00:00:00Z"),
                            "grade" : "A",
                            "score" : 10
                    },
                    {
                            "date" : ISODate("2011-11-23T00:00:00Z"),
                            "grade" : "A",
                            "score" : 9
                    },
                    {
                            "date" : ISODate("2011-03-10T00:00:00Z"),
                            "grade" : "B",
                            "score" : 14
                    }
            ],
            "name" : "Morris Park Bake Shop",
            "restaurant_id" : "30075445"
    }
    >
    >
    > 

На данном этапе наша MongoDB готова для интеграции c Solr. Теперь переходим к его установке и настройке.

Установка Apache Solr

  1. Качаем и устанавливаем Java Development Kit или Server Java Runtime Environmenthttp://www.oracle.com/technetwork/java/javase/downloads/index.html. В случае с Server JRE, вы получаете .tar.gz архив, который можно распаковать куда угодно.
  2. Создаем системную переменную JAVA_HOME, содержащую путь к корню установки Java.
  3. Качаем и устанавливаем Apache Solr: http://lucene.apache.org/solr/mirrors-solr-latest-redir.html. Установка тоже заключается в обычной распаковке zip-архива.
  4. Проверяем, что Solr запускается:
    bin\solr.cmd -f start
  5. Пробуем открыть http://localhost:8983.

Создаем конфигурацию Solr

  1. Идем в папку, куда установлен Solr (например, c:\solr-6.1.0\) и создаем дерево папок и файлов:
    • my_indexes
      • restaurants
        • logs
        • solr
          • solr.xml
          • zoo.cfg
          • restaurants
            • core.properties
            • conf
              • config_files (ниже будет подробно)
            • data
  2. Где взять solr.xml?
    В этом файле указывается режим, в котором работает Solr (обычный или Cloud-режим):
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <solr></solr>
  3. Где взять zoo.cfg?
    Это файл конфигурации ZooKeeper (сервис для репликации-кластеризации Solr). Мы его не используем, поэтому делаем файл по-умолчанию:
    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between
    # sending a request and getting an acknowledgement
    syncLimit=5
    
    # the directory where the snapshot is stored.
    # dataDir=/opt/zookeeper/data
    # NOTE: Solr defaults the dataDir to <solrHome>/zoo_data
    
    # the port at which the clients will connect
    # clientPort=2181
    # NOTE: Solr sets this based on zkRun / zkHost params
  4. Где взять файл core.properties?
    Этот файл просто указывает Solr'у, что это валидная конфигурация и ее имя. Задаем файл таким:
    name=restaurants
  5. Где взять файлы для папки Conf?
    Это файлы стандартные. Можете просто взять их из конфигурации-примера techproducts: examples/techproducts/solr/techproducts/conf. Если у вас еще нет такой папки, то запустите Solr в режиме демонстрации:
    bin/solr.cmd start -e techproducts
  6. Настраиваем нашу кастомную конфигурацию Solr (c:\solr-6.1.0\my_indexes\restaurants\solr\restaurants\conf\solrconfig.xml):
    Пытаемся запустить Solr:
    bin/solr.cmd start -s my_indexes/restaurants/solr

    Пока что конфигурация пустая, но скоро мы это исправим:).

Настраиваем интеграцию MongoDB и Solr

  1. Скачиваем драйверы Solr для MongoDB (конкретно эти версии работают с Solr 6.1.0 и MongoDB 3.4):
    • mongo-java-driver-3.3.0.jar
    • solr-mongo-importer-1.1.0.jar
  2. Сохраняем файлы в папку: c:\solr-6.1.0\contrib\dataimporthandler\lib\.
  3. Редактируем файл c:\solr-6.1.0\my_indexes\restaurants\solr\restaurants\conf\solrconfig.xml (дописываем строки в соответствующие секции):
    <lib dir="../../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
    <lib dir="../../../../dist/" regex="solr-dataimporthandler-.*\.jar" />
    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
       <lst name="defaults">
          <str name="config">db-data-config.xml</str>
       </lst>
    </requestHandler>
  4. Создаем файл c:\solr-6.1.0\my_indexes\restaurants\solr\restaurants\conf\db-data-config.xml следующего содержания:
    <?xml version="1.0"?>
    <dataConfig>
       <dataSource name="MyMongo" type="MongoDataSource" database="solrdb" />
       <document name="import">
       <!-- if query="" then it imports everything -->
          <entity name="mongoImport"
                  processor="MongoEntityProcessor"
                  query=""
                  collection="test"   
                  datasource="MyMongo"
                  transformer="MongoMapperTransformer">                                             
                  <!-- <field column="id"  name="id" mongoField="_id" />               
                  <field column="name" name="name" mongoField="name"/>                             -->
    			  <field column="id"  name="id" mongoField="_id" />
    			  <field column="address"  name="name" mongoField="address" />
    			  <field column="borough"  name="name" mongoField="borough" />
    			  <field column="cuisine"  name="name" mongoField="cuisine" />
    			  <field column="grades"  name="name" mongoField="grades" />
    			  <field column="name"  name="name" mongoField="name" />
    			  <field column="restaurant_id"  name="name" mongoField="restaurant_id" />
           </entity> 
       </document> 
    </dataConfig> 
  5. Настраиваем схему Solr. Добавляем в файл c:\solr-6.1.0\my_indexes\restaurants\solr\restaurants\conf\managed-schema описания полей:
    <field name="address" type="text_general" indexed="true" stored="true"/>
    <field name="borough" type="text_general" indexed="true" stored="true"/>
    <field name="cuisine" type="text_general" indexed="true" stored="true"/>
    <field name="grades" type="text_general" indexed="true" stored="true"/>
    <field name="restaurant_id" type="text_general" indexed="true" stored="true"/>
  6. Открываем http://localhost:8983/solr/#/restaurants/dataimport//dataimport и пробуем запустить импорт. Не забудьте выбрать Entity.

Вот и все! Буду рад комментариям!

Метки: solr, mongodb

ПечатьE-mail

Добавить комментарий


Защитный код
Обновить