Solr, efsane bir full-text search aracı. Daha önceki yazılarımda detaylarından bahsetmiştim. İnanılmaz hızlı sorgu dönüşleri sağlıyor. Hemen hemen her büyük proje de in-search için kullanıyor. (Netflix, Instagram, Duck Duck Go vb.). Elastic Search’e karşın benim favorim Solr. Yapılandırması zor gibi görünsede ayağa kaldırmak çok kolay. Bence en karmaşık kısmı yetkilendirme kısmı.
Hızlıca kurulum ile ilgili aşamalara geçelim;
İlk önce Java ihtiyacını giderilim.
sudo yum install lsof java-1.8.0-openjdk java-1.8.0-openjdk-devel
LATEST_VER’i değişen son sürüme karşı kodda minimum değişlik yapılsın diye ekliyorum.
export LATEST_VER="8.0.0" curl -O https://www-eu.apache.org/dist/lucene/solr/${LATEST_VER}/solr-${LATEST_VER}.tgz
Solr paketi indi. Arşiven çıkaralım.
tar xvf solr-${LATEST_VER}.tgz
Güzelce kurulumu başlatalım.
cd solr-${LATEST_VER}/bin/ sudo ./install_solr_service.sh ~/solr-${LATEST_VER}.tgz
sudo systemctl enable solr
Süper artık Solr ayağa kalktı. Başlangıçta çalışacak.
http://ip:8983/solr
Bu adım çok önemli. Core oluşturuyoruz. Core bir nevi DB gibi düşünün.
sudo su - solr -c "/opt/solr/bin/solr create -c testcollection -n data_driven_schema_configs"
/var/solr/data
Bu dizinde solr core’ları saklanıyor. buraya security.json adında bir config dosyası bırakıyorum. Solr web ve Rest Api’ye bu dosya sayesinde erişim sağlayacağım.
{ "authentication":{ "blockUnknown": true, "class":"solr.BasicAuthPlugin", "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, "realm":"My Solr users", "forwardCredentials": false }, "authorization":{ "class":"solr.RuleBasedAuthorizationPlugin", "permissions":[{"name":"security-edit", "role":"admin"}], "user-role":{"solr":"admin"} }}
Default olarak kullanıcı solr, şifremiz ise SolrRocks. Şifre sha256(şifre+salt) şeklinde oluşturuluyor.
Öncelikle şunuda eklemeyi unutmayayım. In cloud yapısında ZooKeeper denen bir servis var. Bu kısım oldukça detaylı o kısmı geçip, standalone kurulum için bu ayarlar.
Her şey güzel. Ama henüz bitmedi. Solr’ın verileri Db’nizden çekip indekslemeyebilmesi için bir Data Import Handler oluşturmamız lazım.
/var/solr/data/Koleksiyon_Adi/conf/solrconfig.xml
<lib dir="${solr.install.dir:../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> <lib dir="${solr.install.dir:../..}/dist/" regex="mysql-connector-java-\d.*\.jar" /> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
/opt/solr/server/lib
Klasörünün altına da bir mysql-connector-java-surum_no.jar indirip, jar olarak durmasını sağlamalıyız.
Sıra geldi verileri çekebilmemiz için gerekli veritabanı bağlantı ayar dosyasına.
nano data-config.xml
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_name" user="user" password="pass" /> <document> <entity name="Veriler" query="select * from veriler order by sira desc"> <field column="sutun_adi" name="sutun_adi"/> <field column="sutun_adi" name="sutun_adi"/> <field column="sutun_adi" name="sutun_adi"/> <field column="sutun_adi" name="sutun_adi"/> <field column="sutun_adi" name="sutun_adi"/> </entity> </document> </dataConfig>
Yukarıdaki şekilde dosyayı ekledikten sonra nihayet solr kurulumunu tamamlıyoruz demek isterdim :). Devam…
http://ip:8983/solr/#/koleksiyon_adi/schema
Buradan indekslemek için bir db solr tablosu oluşturacağız. Dikkat etmemiz gereken veri tipi ve buradaki field isminin, tanımladığımız data-config.xml deki alanlar ile uyuşması. Çünkü burada data mapping yapılacak.
Burada fieldlarımızı tanımladıktan sonra mutlu sona geldik. :).
Hadi verilerimizi çekelimde bitsin artık bu kurulum.
http://ip:8983/solr/#/koleksiyon_adi/dataimport/
Bu ekranda artık dbye bağlandığımız verileri çektiğimiz ekran.
Artık her şey tamam. Zevkle sorgulayabiliriz. 🙂
ttp://ip:8983/solr/#/koleksiyon_adi/query
fq kısmına field_Adi:kelime yazarak sorgulamamızı yapabiliriz. Query’in kendine has bir detayı var. Daha önce ki Solr yazımda buna değindiğim için bu yazıda anlatmayacağım. Bir o kadar kolay bir o kadar da zor Solr yazımın sonuna geldim.
İyi çalışmalar.