Solr java ile geliştirilmiş açık kaynak kodlu, Tomcat ve Jetty gibi sunucular üzerinde çalışabilen tam metin arama kütüphanesidir.
Solr herhangi bir programlama dili kullanmadan sunucuya kurulur. Solr ile verileri sunucuda indexleriz. Bu veriler üzerinde arama yapabilmeyi Solr ile sağlarız.
Solr için veriler Document olarak adlandırılıyor.
Documentleri veritabanındaki satırlar olarak düşünebiliriz.
Documentin fieldları vardır. Bunu da veritabanındaki sütunlar olarak düşünebiliriz.
İndekslenen bu veriler üzerinde http isteği ile sorgulama yaparak sonuçları çok hızlı bir sekilde çekebiliriz.
Veriler xml, json, binary gibi formatlarda alınabilir.
Örnek Sorgular :
Solr'ı bir serverda kurduğumuzu ve solr şemamızı oluşturduğumuzu varsayarak;
http://solr-server-adresiniz/solr/solr-semaniz/select?q=*:*
ile HTTP Get Request ile sorgulamalarımıza cevap alabiliriz.
Bu sorgu solr için parametresiz default sorgudur ve cevap şu şekilde döner:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"1",
"name":"Asus Bilgisayar",
"type":1,
"time":1508950750836,
"description":"ASUS Masaüstü Bilgisayar."
}]
}}
numFound: toplam veriyi(totalCount) ifade eder.
start: kaçıncı satırdan itibaren verileri çektiğini ifade eder.
id, name, type, time, description ise bizim şemamızda belirttiğimiz fieldlardır.
Herhangi bir parametre vermediğimizde veriler json formatında gelir ve ilk 10 veriyi gösterir.
Paging:
Veri dönüş tipini ve indexlenen data sayısını parametremize eklemek için; rows=20&start=5&wt=json parametresini eklemeliyiz.
http://solr-server-adresiniz/solr/solr-semaniz/select?q=*:*&rows=20&start=5&wt=json
şeklinde sorgu yapılır.
rows: kaç satır veri getirileceğini
start: kaçıncı satırdan itibaren veri getirileceiğini
wt: verinin hangi formatta geleceğini simgeliyor.
Bu sorgunun cevabı ise şöyle olur :
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"start":"5",
"rows":"20",
"wt":"json"
}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"1",
"name":"Asus Dizüstü Bilgisayar",
"type":1,
"time":1508950750836,
"description":"ASUS Masaüstü Bilgisayar."
},
{
"id":"2",
"name":"HP Masaüstü Bilgisayar",
"type":1,
"time":1508950764439,
"description":"HP Pavilion 250 G6 1WY08EA Notebook."
},
{
"id":"3",
"name":"Note8 Cep Telefonu",
"type":2,
"time":1508950764439,
"description":"Samsung Note8 Android Cep Telefonu"
},
..............]
}}
Keyword Bazlı Sorgulama
name=Bilgisayar parametresi name name field'ında Bilgisayar geçen verileri getirir.
http://solr-server-adresiniz/solr/solr-semaniz/select?q=name=Bilgisayar
Keyword AND ve OR kullanımı
Diyelim name field'ında hem HP hem Dizüstü Bilgisayar olan verileri getirmek istiyoruz.
http://solr-server-adresiniz/solr/solr-semaniz/select?q=name=HP&name=Dizüstü+Bilgisayar şeklinde sorgu yapmak gerekiyor. (+ yerine %20 yazılabilir)
Ancak içerisinde HP veya Bilgisayar kelimeleri geçsin istersek:
http://solr-server-adresiniz/solr/solr-semaniz/select?q=name=HP,Dizüstü+Bilgisayar
şeklinde sorgu yapılır.
Tarih parametresine göre sorgu
Tarih değerlerini timestamp olarak tuttuğumuzu düşünelim;
* http://solr-server-adresiniz/solr/solr-semaniz/select?q=time=201508954448138
* http://solr-server-adresiniz/solr/solr-semaniz/select?q=time=[1508950849092%20TO%201508954448138]
* http://solr-server-adresiniz/solr/solr-semaniz/select?q=time=[*%20TO%201508954448138]
* http://solr-server-adresiniz/solr/solr-semaniz/select?q=time=[1508950849092%20TO%*]
Solr Sıralama (sorting):
name alanına göre alfabetik sıralama yaparsak; parametrek olarak fq=name+asc eklemek gerekiyor;
http://solr-server-adresiniz/solr/solr-semaniz/select?fq=name+asc&q=*:*
Eğer tersten sıralamak istiyorsak asc yerine desc yazmak gerekiyor.