tarafından eklendi tarafından eklendi

Centos 7 Üzerine Solr Kurulumu

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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo yum install lsof java-1.8.0-openjdk java-1.8.0-openjdk-devel
sudo yum install lsof java-1.8.0-openjdk java-1.8.0-openjdk-devel
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
export LATEST_VER="8.0.0"
curl -O https://www-eu.apache.org/dist/lucene/solr/${LATEST_VER}/solr-${LATEST_VER}.tgz
export LATEST_VER="8.0.0" curl -O https://www-eu.apache.org/dist/lucene/solr/${LATEST_VER}/solr-${LATEST_VER}.tgz
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
tar xvf solr-${LATEST_VER}.tgz
tar xvf solr-${LATEST_VER}.tgz
tar xvf solr-${LATEST_VER}.tgz

Güzelce kurulumu başlatalım.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd solr-${LATEST_VER}/bin/
sudo ./install_solr_service.sh ~/solr-${LATEST_VER}.tgz
cd solr-${LATEST_VER}/bin/ sudo ./install_solr_service.sh ~/solr-${LATEST_VER}.tgz
cd solr-${LATEST_VER}/bin/
sudo ./install_solr_service.sh ~/solr-${LATEST_VER}.tgz
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable solr
sudo systemctl enable solr
sudo systemctl enable solr

Süper artık Solr ayağa kalktı. Başlangıçta çalışacak.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://ip:8983/solr
http://ip:8983/solr
http://ip:8983/solr

Bu adım çok önemli. Core oluşturuyoruz. Core bir nevi DB gibi düşünün.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo su - solr -c "/opt/solr/bin/solr create -c testcollection -n data_driven_schema_configs"
sudo su - solr -c "/opt/solr/bin/solr create -c testcollection -n data_driven_schema_configs"
sudo su - solr -c "/opt/solr/bin/solr create -c testcollection -n data_driven_schema_configs"
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/var/solr/data
/var/solr/data
/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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{
"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"}
}}
{ "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"} }}
{
"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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/var/solr/data/Koleksiyon_Adi/conf/solrconfig.xml
/var/solr/data/Koleksiyon_Adi/conf/solrconfig.xml
/var/solr/data/Koleksiyon_Adi/conf/solrconfig.xml
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<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>
<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>
 <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>
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/opt/solr/server/lib
/opt/solr/server/lib
/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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano data-config.xml
nano data-config.xml
nano data-config.xml
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<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>
<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>
<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…

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://ip:8983/solr/#/koleksiyon_adi/schema
http://ip:8983/solr/#/koleksiyon_adi/schema
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
http://ip:8983/solr/#/koleksiyon_adi/dataimport/
http://ip:8983/solr/#/koleksiyon_adi/dataimport/
http://ip:8983/solr/#/koleksiyon_adi/dataimport/

Bu ekranda artık dbye bağlandığımız verileri çektiğimiz ekran.

Entity’i data-config.xml’de yazdığımız entity gelecek ve onu seçelim. Command full-import ‘u seçelim. Ayrıca anbean importing’i takip etmek için, auto-refresh status’te tikli olsun. Yukarıdaki gibi yeşil bir alert çıktığında işlem tamam.

Artık her şey tamam. Zevkle sorgulayabiliriz. 🙂

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ttp://ip:8983/solr/#/koleksiyon_adi/query
ttp://ip:8983/solr/#/koleksiyon_adi/query
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.