Помимо ответов на вопросы OP, позвольте мне рассказать немного об Apache Solr, от простого ознакомления с подробным описанием установки и реализации .
Простое введение
Любой, кто имел опыт работы с поисковыми системами выше или другими двигателями, которых нет в списке - я хотел бы услышать ваше мнение.
Solr не должен использоваться для решения проблем в реальном времени. Для поисковых систем Solr в значительной степени игра и работает без нареканий .
Solr отлично работает на веб-приложениях с высоким трафиком ( я где-то читал, что он не подходит для этого, но я подтверждаю это утверждение ). Он использует оперативную память, а не процессор.
- релевантность результата и рейтинг
Подталкивание помогает ранжировать ваши результаты показывают на вершине. Скажем, вы пытаетесь найти имя джон в полях FirstName и LastName , и вы хотите , чтобы уместность в ПгвЬЫате поле, то вам необходимо увеличить вверх ПгвЬЫате поле , как показано.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Как вы можете видеть, Firstname поле увеличил с 2 балла.
Подробнее о SolrRelevancy
- скорость поиска и индексации
Скорость невероятно высока и без компромиссов. Причина, по которой я перешел на Solr .
Что касается скорости индексации, Solr также может обрабатывать JOINS из таблиц вашей базы данных. Более высокое и сложное JOIN влияет на скорость индексации. Тем не менее, огромная конфигурация оперативной памяти может легко справиться с этой ситуацией.
Чем выше оперативная память, тем выше скорость индексации Solr.
- простота использования и простота интеграции с Django
Никогда не пытался интегрировать Solr и Django , однако вы можете добиться этого с Haystack . Я нашел несколько интересных статей на эту же тему, и вот вам github .
- требования к ресурсам - сайт будет размещен на VPS, поэтому в идеале поисковой системе не потребуется много оперативной памяти и процессора
Solr размножается на RAM, поэтому, если RAM высока, вам не нужно беспокоиться о Solr .
Использование ОЗУ Solr резко возрастает при полной индексации, если у вас есть несколько миллиардов записей, вы можете разумно использовать импорт Delta для решения этой ситуации. Как уже говорилось, Solr - это решение , которое можно использовать только в режиме реального времени .
Solr отлично масштабируется. Посмотрите на SolrCloud . Некоторые ключевые особенности этого.
- Осколки (или осколок - это концепция распределения индекса по нескольким машинам, например, если ваш индекс слишком велик)
- Балансировка нагрузки (если Solrj используется с облаком Solr, он автоматически выполняет балансировку нагрузки с помощью механизма Round-Robin)
- Распределенный поиск
- Высокая доступность
- дополнительные функции, такие как «Вы имели в виду?», связанные поиски и т. д.
Для описанного выше сценария вы можете использовать SpellCheckComponent, который упакован с Solr . Есть много других функций, SnowballPorterFilterFactory помогает извлекать записи, например, если вы печатаете, книги вместо книги , вам будут представлены результаты, связанные с книгой .
Этот ответ широко посвящен Apache Solr и MySQL . Джанго выходит за рамки.
Предполагая, что вы находитесь в среде LINUX, вы можете перейти к этой статье дальше. (у меня была версия Ubuntu 14.04)
Детальная установка
Начиная
Скачать Apache Solr из здесь . Это будет версия 4.8.1 . Вы можете скачать новые версии, я нашел эту стабильную.
После загрузки архива распакуйте его в папку по вашему выбору. Скажи .. Downloads
или как угодно .. Так это будет выглядетьDownloads/solr-4.8.1/
По вашему запросу. Перейдите в каталог
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Так что теперь вы здесь ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Запустите сервер приложений Jetty
Jetty доступен в папке примеров solr-4.8.1
каталога, поэтому перейдите в нее и запустите сервер приложений Jetty.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Теперь не закрывайте терминал, сверните его и оставьте в стороне.
(СОВЕТ: используйте & after start.jar, чтобы Jetty Server работал в фоновом режиме)
Чтобы проверить, работает ли Apache Solr успешно, перейдите по этому URL в браузере. HTTP: // локальный: 8983 / Solr
Запуск Jetty на пользовательском порту
Он работает на порту 8983 по умолчанию. Вы можете изменить порт либо здесь, либо непосредственно внутри jetty.xml
файла.
java -Djetty.port=9091 -jar start.jar
Загрузите JConnector
Этот файл JAR действует как мост между MySQL и JDBC. Загрузите независимую от платформы версию здесь
После загрузки извлеките папку, скопируйте mysql-connector-java-5.1.31-bin.jar
и вставьте ее в каталог lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Создание таблицы MySQL для связи с Apache Solr
Чтобы использовать Solr , вам нужно иметь несколько таблиц и данных для поиска. Для этого мы будем использовать MySQL для создания таблицы и добавления некоторых случайных имен, а затем мы можем использовать Solr для подключения к MySQL и индексирования этой таблицы и ее записей.
Структура 1.Table
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. Заполните приведенную выше таблицу
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Попасть внутрь ядра и добавить директивы lib
1. Перейдите к
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2. Модификация solrconfig.xml
Добавьте эти две директивы в этот файл ..
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Теперь добавьте DIH (обработчик импорта данных)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3. Создайте файл db-data-config.xml
Если файл существует, тогда игнорируйте, добавьте эти строки в этот файл. Как видно из первой строки, вам необходимо предоставить учетные данные вашей базы данных MySQL . Имя базы данных, имя пользователя и пароль.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(СОВЕТ: Вы можете иметь любое количество объектов, но следите за полем идентификатора, если они одинаковые, тогда индексирование будет пропущено.)
4. Изменить файл schema.xml.
Добавьте это в свой schema.xml, как показано ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Реализация
индексирование
Вот где настоящая сделка. Вам нужно выполнить индексацию данных из MySQL в порядок Solr, чтобы использовать Solr Queries.
Шаг 1. Перейдите в админ-панель Solr.
Нажмите на ссылку http: // localhost: 8983 / solr в своем браузере. Экран открывается так.
Как показывает маркер, перейдите в раздел « Ведение журнала», чтобы проверить, не привела ли какая-либо из вышеуказанных конфигураций к ошибкам.
Шаг 2: Проверьте свои журналы
Итак, теперь вы здесь, как вы можете есть много желтых сообщений (ПРЕДУПРЕЖДЕНИЯ). Убедитесь, что у вас нет сообщений об ошибках, отмеченных красным. Ранее в нашей конфигурации мы добавили запрос select в наш db-data-config.xml , скажем, если бы в этом запросе были какие-либо ошибки, он бы появился здесь.
Хорошо, без ошибок. Мы в порядке. Давайте выберем collection1 из списка, как изображено, и выберите Dataimport
Шаг 3: DIH (обработчик импорта данных)
Используя DIH, вы будете подключаться к MySQL из Solr через файл конфигурации db-data-config.xml из интерфейса Solr и извлекать 10 записей из базы данных, которая индексируется в Solr .
Для этого выберите « Полный импорт» и установите флажки « Очистить и зафиксировать» . Теперь нажмите Выполнить, как показано.
В качестве альтернативы, вы также можете использовать прямой запрос полного импорта, как этот ..
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
После того, как вы нажали « Выполнить» , Solr начнет индексировать записи. Если возникнут какие-либо ошибки, появится сообщение « Ошибка индексации», и вам придется вернуться в раздел « Ведение журнала », чтобы узнать, что пошло не так.
Предполагая, что в этой конфигурации нет ошибок, и если индексация завершена успешно, вы получите это уведомление.
Шаг 4: Выполнение Solr Queries
Похоже, что все прошло хорошо, теперь вы можете использовать Solr Queries для запроса данных, которые были проиндексированы. Нажмите на Запрос слева, а затем нажмите кнопку Выполнить внизу.
Вы увидите проиндексированные записи, как показано.
Соответствующий запрос Solr для перечисления всех записей
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Ну, там идет все 10 проиндексированных записей. Скажем, нам нужны только имена, начинающиеся с Ja , в этом случае вам нужно указать имя столбца solr_name
, поэтому ваш запрос выглядит следующим образом.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
Вот как вы пишете Solr Queries. Чтобы узнать больше об этом, проверьте эту прекрасную статью .