Окрім відповіді на запити ОП, дозвольте передати деяку інформацію про Apache Solr від простого вступу до детальної установки та впровадження .
Просте вступ
Кожен, хто мав досвід роботи з пошуковими системами вище, або іншими двигунами, які не в списку - я хотів би почути вашу думку.
Solr не слід використовувати для вирішення проблем у режимі реального часу. Для пошукових систем Solr - це дуже велика гра та працює бездоганно .
Solr відмінно працює у веб-додатках із високим трафіком ( я десь прочитав, що це не підходить для цього, але я створюю резервну копію цього твердження ). Він використовує оперативну пам’ять, а не процесор.
- релевантність результатів та рейтинг
Підштовхування допомагає ранжувати ваші результати показують на вершині. Скажімо, ви намагаєтеся знайти ім'я джон в полях FirstName і LastName , і ви хочете , щоб доречність в ПгвЬИате поле, то вам необхідно збільшити вгору ПгвЬИате поле , як показано.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Як ви можете бачити, Firstname поле збільшив з 2 бали.
Детальніше про SolrRelevancy
- швидкість пошуку та індексації
Швидкість неймовірно швидка і з цим не йде ніяких компромісів. Причина, що я переїхав у Солр .
Що стосується швидкості індексації, Solr також може обробляти JOINS з таблиць вашої бази даних. Більш високий і складний ПРИЄДНУЮТЬ впливає на швидкість індексації. Однак величезна конфігурація оперативної пам'яті може легко вирішити цю ситуацію.
Чим вище оперативна пам'ять, тим швидше швидкість індексації Solr.
- простота використання та простота інтеграції з Django
Ніколи не намагалися інтегрувати Солра і Джанго , однак ви можете досягти цього з Haystack . Я знайшов цікаву статтю про ту саму, і ось цей github для цього.
- вимоги до ресурсів - сайт розміщуватиметься на VPS, тому в ідеалі пошуковій системі не потрібно багато оперативної пам’яті та процесора
Solr розмножується на оперативній пам’яті, тому, якщо оперативна пам’ять висока, вам не доведеться турбуватися про 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
Тепер не закривайте термінал, мінімізуйте його і нехай він залишається осторонь.
(Порада: Використовуйте & після start.jar, щоб сервер Jetty запускався у фоновому режимі)
Щоб перевірити, чи успішно працює Apache Solr , відвідайте цю URL-адресу в браузері.http: // localhost: 8983 / солр
Запуск 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.Структура таблиці
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.Navigate до
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
Додайте це до схеми.xml, як показано ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Впровадження
Індексація
Ось де справжня справа. Вам потрібно зробити індексацію даних від MySQL до Solr в порядку замовлення для використання Solr-запитів.
Крок 1: Перейдіть на панель адміністратора Solr
Натисніть URL-адресу http: // localhost: 8983 / solr у своєму браузері. Екран відкриється так.
Як вказує маркер, перейдіть до Порядку входу в журнал, щоб перевірити, чи привела будь-яка з наведених вище конфігурацій до помилок.
Крок 2: Перевірте свої журнали
Гаразд, тепер ви тут, оскільки, можливо, є багато жовтих повідомлень (ПОПЕРЕДЖЕННЯ). Переконайтеся, що у вас немає повідомлень про помилки, позначених червоним кольором. Раніше в нашій конфігурації ми додавали запит вибору в наш db-data-config.xml , скажімо, якщо в цьому запиті були помилки, він би відображався тут.
Чудово, помилок немає. Нам добре їхати. Виберемо колекцію1 зі списку, як зображено, і виберемо 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 запитів
Здається, що все пройшло добре, тепер ви можете використовувати 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. Щоб прочитати більше про це, перегляньте цю прекрасну статтю .