This document provides an introduction and instructions for installing and using Apache Solr 4.4. It describes key features of Solr like full text search and near real-time indexing. It outlines how to download Solr, install it on Apache Tomcat, configure the Solr home directory, add required SLF4J jars, and access the Solr admin interface. The document also provides code examples for indexing and querying data using the SolrJ API.
The document discusses REST (Representational State Transfer) and how to implement RESTful web services and clients in Grails. Some key points:
- REST is an architectural style for building web services using plain text, XML, or JSON over HTTP. It uses standard HTTP methods like GET, PUT, POST, and DELETE to perform CRUD operations on resources.
- In Grails, RESTful controllers can be generated and mapped to HTTP methods automatically or explicitly. Data can be returned in XML or JSON format.
- Clients can access REST services using HTTPBuilder or by submitting HTML forms. Content negotiation allows returning different formats.
- Additional topics covered include RSS/Atom feeds, custom XML output, and
This document provides tips for tuning Solr for high performance. It discusses optimizing queries and facets for CPU usage, tuning memory usage such as using docValues, optimizing disk usage through merge policies and commit settings, reducing network overhead through batching and caching, and techniques like deep paging to improve performance for large result sets. The document emphasizes only indexing and retrieving necessary fields to reduce resource usage and tuning garbage collection to avoid pauses.
This document provides an introduction and instructions for installing and using Apache Solr 4.4. It describes key features of Solr like full text search and near real-time indexing. It outlines how to download Solr, install it on Apache Tomcat, configure the Solr home directory, add required SLF4J jars, and access the Solr admin interface. The document also provides code examples for indexing and querying data using the SolrJ API.
The document discusses REST (Representational State Transfer) and how to implement RESTful web services and clients in Grails. Some key points:
- REST is an architectural style for building web services using plain text, XML, or JSON over HTTP. It uses standard HTTP methods like GET, PUT, POST, and DELETE to perform CRUD operations on resources.
- In Grails, RESTful controllers can be generated and mapped to HTTP methods automatically or explicitly. Data can be returned in XML or JSON format.
- Clients can access REST services using HTTPBuilder or by submitting HTML forms. Content negotiation allows returning different formats.
- Additional topics covered include RSS/Atom feeds, custom XML output, and
This document provides tips for tuning Solr for high performance. It discusses optimizing queries and facets for CPU usage, tuning memory usage such as using docValues, optimizing disk usage through merge policies and commit settings, reducing network overhead through batching and caching, and techniques like deep paging to improve performance for large result sets. The document emphasizes only indexing and retrieving necessary fields to reduce resource usage and tuning garbage collection to avoid pauses.
Türkiye'nin ilk ve tek doküman yönetim sistemi ve elektronik arşiv earşiv sistemi bir arada yazılmı, doküman yönetim sistemine farklı bir bakış açısı getiriyoruz.
Türkiye'nin ilk ve tek doküman yönetim sistemi ve elektronik arşiv earşiv sistemi bir arada yazılmı, doküman yönetim sistemine farklı bir bakış açısı getiriyoruz.
3. AARAMARAMA SİSTEMLERİSİSTEMLERİ GELİŞİMİGELİŞİMİ
• Özel dizinleyiciler
• Ters indeksi
• Segment birleştirir
• Özel analizörleri
• Yönlendirme
• Analizörleri Yapılandırma
• Yönlendirme
• Belge Adresleme
• Alt belge sorguları
• Kopyalama
• JSON belge giriş
• Yönlendirme, Karmaşık Sorgular
4. ELASTIC SEARCHELASTIC SEARCH
• ElasticSearch Java ile geliştirilmiş açık kaynak, lucene tabanlı, ölçeklenebilir bir
tam metin(full text) arama motoru ve veri analiz aracıdır.
• Günümüz bilişim dünyasında, sosyal medyada, video paylaşım sitelerinde, iletişim,
sağlık, güvenlik ve diğer alanlarda hizmet veren orta ve büyük ölçekli şirketlerde
her an devasa ölçekte veri üretiliyor. Burada bir bilgi/veri okyanusundan
bahsediyoruz ve bilişim dünyasında bu okyanusa kısaca big data diyoruz. Big data
dünyasında bahsettiğimiz bu verilerin önemli bir bölümü başlangıçta,
yapılandırılmamış(unstructured) dağınık ve tek başına çok da anlamlı olmayan
haldedirler.
5. ELASTIC SEARCHELASTIC SEARCH
• Bu sebeple bu devasa verinin performanslı olarak kayıt altına alınması, erişilmesi,
analiz edilip işlenmesi gibi ihtiyaçlar söz konusudur. ElasticSearch, benzeri arama
motorları gibi, big data dünyasına has bahsedilen problemlerle başa çıkmak adına
geliştirilmiş araçlardan birisidir.
6. ELASTIC SEARCHELASTIC SEARCH
• Tam metin arama
• Veritabanlarında depolanan veri büyüdükçe, bu veri üzerinde gerçekleştirilen sorgu
operasyonlarında hız/performans sorunları meydana gelmektedir. Buna çare olarak,
metin alanlarında yer alan kelimelerin endekslenerek kataloglanması yoluna
gidilmiştir. Bu sayede büyük boyutlu veri ile çalışılırken dahi, veritabanlarının daha
hızlı, performanslı cevap vermesi sağlanmıştır.
• ElasticSearch çoklu dil desteği, güçlü bir sorgu dili ve otomatik tamamlama gibi güçlü
tam metin arama yetenekleri sağlar.
7. ELASTIC SEARCHELASTIC SEARCH
• Index
• ElasticSearch belge yönelimli(document oriented) bir arama
motorudur. ElasticSearch’te her kayıt, yapılandırılmış JSON belgesidir. Bir başka
deyiş ile, ElasticSearch’e endekslenmesi için gönderilmiş her veri bir JSON
dokümandır. Dokümanın bütün alanları varsayılan olarak endekslenir ve tek bir
sorguda kullanılabilir.
• Veritabanı yönetim sistemlerine kıyasla ElasticSearch endeksleri, veritabanları
gibi düşünülebilir. Nasıl ki bir veritabanı, düzenli bilgiler topluluğudur, ElasticSearch
endeksleri de yapılandırılmış JSON belgeler topluluğudur.
8. ELASTIC SEARCHELASTIC SEARCH
• Type
• Tipleri, yine veritabanı yönetim sistemlerine kıyasla tablolar gibi düşünebiliriz.
Endeksler, bir ve birden fazla tip içerebilir
9. ELASTIC SEARCHELASTIC SEARCH
• Mapping
• Haritalama, bir belgenin arama motoruna nasıl aktarılması gerektiğini tanımlama
sürecidir. Tipler oluşturulurken, mapping bilgisi ile oluşturulur. ElasticSearch,
gönderilen veriden hareketle(örneğin string, integer, double, boolean) mapping’i
otomatik oluşturur(açık haritalama/explicit mapping). Bir mapping tanımlayarak
varsayılan mapping’i geçersiz kılabilirsiniz.
10. ELASTIC SEARCHELASTIC SEARCH
• Sonuç
• ElasticSearch, benzerlerine kıyasla gerek konfigürasyon gerek kullanım açısından
oldukça elastik, büyük veri ile çalışan sistemlerde I/O darboğazlarına sebebiyet
verebilen arama işlemleri ve veri analizi için son derece cazip bir seçenektir.
12. ELASTIC SEARCHELASTIC SEARCH
• 1.Elastic’i Kurmak
• Elastıc dosyasını C://elastic klasorune atın. cmd den giriş elasticsearch.bat ı çalıştırın.
ElasticSearch Çalıştı Test için: http://localhost:9200/ kullanabilirsiniz
13. ELASTIC SEARCHELASTIC SEARCH
• 2. JSON’da göndereceğimiz veriyi hazırlamak:
• Üç Tane JSON nesnesi oluşturuyoruz. Çünkü bu nesneler birbirinin ardına ekleniyor.
JSON içten dışa doğru oluşturulmaya başlanan bir sistem. Elde etmeye çalıştığım
örnek Query
14. ELASTIC SEARCHELASTIC SEARCH
Üsteki Yazıda curl , POST ve URL kısmını kodda hallediyoruz. Query içeriğine
yazacağımız kısmıda alttaki kodda. Altatki kod’un çıktısı şu şekilde oluyor: “query”:
{“query_string”: {“query”: “kill”}}
Bu kodda yer alan parent bizim JSON’unumuz oluyor.
15. 3)Oluşan JSON’umuzu elastic’e göndermek gerek burada da HttpURLConnection Class’ını kullanıyoruz.
Bundan sonra satırların yanında açıklama vereceğiz.
String url = “http://localhost:9200/_search; //URL’mizi yazdık
URL object = new URL(url);
HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty(“Content-Type”, “application/json”);
con.setRequestProperty(“Accept”, “application/json”);
con.setRequestMethod(“POST”); //Silme işlemi için delete olarak yazılacak
ELASTIC SEARCHELASTIC SEARCH
16. JSON OLUŞTUR
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString()); //Yazdığımız JSON’u connection’a ekliyoruz. UTF ayarıda buradan yapın.
wr.flush();// Gönderdiğiniz sorgu/işlemin sonucu almak içinde alttaki kodu uyguluyoruz
StringBuilder sb = new StringBuilder();
int HttpResult = con.getResponseCode();
if (HttpResult == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), “utf-8 ));″
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + “n”);
}
br.close();
System.out.println(“” + sb.toString());
} else {
System.out.println(con.getResponseMessage());
}
ELASTIC SEARCHELASTIC SEARCH
17. SOLRSOLR
• Solr, Lucene üzerine kurulu, arama uygulamalarında kullanılan bir Apache ürünüdür.
• Solr ve Lucene arasındaki ilişki araba ve araba motoru arasındaki ilişkiye benzer.
Lucene motor, Solr ise arabadır.
• Lucene olmadan Solr çalışmaz. Lucene; temelde metin analizi, indexleme ve arama
gibi temel işlevleri sunan bir Apache projesidir.
18. SOLRSOLR
• Solr ise, Lucene temelini kullanan, onun üstüne filtreleme, faceting, önbellekleme,
dağıtık mimari desteği gibi şeyleri kolay yapılandırma dosyaları ile yönetebilmenizi
sağlar. Verileri XML, JSON, Binary gibi çeşitli formatlarda almanızı sağlar.
• Solr, Java ile geliştirilmiştir. Solr açık kaynak kodludur. Solr farklı sunucular (Jetty,
Resin, JRun, Tomcat) üzerinde çalışır. Herhangi bir programlama dili kullanmadan,
Solr sunucuyu kurulur.
• Solr ile verilerinizi sunucuda indekslersiniz. Bu veriler üzerinde arama yapabilmeyi
Solr ile sağlarsınız. Solr için veriler “Document” olarak adlandırılır. Solr’a veri
eklemek demek yeni bir “Document” eklemek demektir. Solr her şeyi bir "döküman"
olarak saklar.
19. SOLRSOLR
• Sorgulama işlemlerinde Solr çok ciddi anlamda hız kazandırabilmektedir. Veri
miktarı arttığı zaman veritabanlarına select çekmek ziyadesiyle zaman kaybı
yaratmaktadır. Veritabanına select çekmek yerine, veritabanındaki kayıtlar
indekslenebilir ve Solr üzerinden sorgulamalar yapılabilir. (Ciddi anlamda zaman
kazancı yaratmaktadır)
• Artık gün geçtikçe daha büyük bir ivme ile büyüyen verilerle uğraşmak, bu verilerden
istediğimiz özelliklere sahip verileri hızlı bir şekilde sorgulamayilmek için
indeksleme mekanizması bir zorunluluk haline gelmektedir. Küçük miktarda veri ile
uğraşıyorsanız böyle mekanizmalara gerek yok diye düşünüyoruz.
20. SPHINXSPHINX
• Sphinx C++ ile kodlanmış olup Linux, Windows, MacOS gibi popüler işletim sistemleri
ile çalışabilen arama motoru (full text search engine) olarak tanımlanır.Veritabanı
olarak MySQL ve PostreSQL ile çalışabilir.Çoğu programlama dili (PHP, Java, ASP.net,
Python) için API ı mevcuttur.
21. SPHINXSPHINX
• Temel Çalışma Prensibi :
• Yüklü sistemlerde en zor iş arama işleridir.Hele ki yapılan bu arama kelime araması
ise tablonun büyüklüğüne göre işlemler bir o kadar zorlaşır.Örnek vermek gerekir ise
mesela MySQL için tablo yapısını MYISAM yaparak belirli alanlara full text index
atmanız gerekir.
• Bunun yerine Sphinx te işler şöyle ilerliyor.Önce Sphinx ile indexlenecek veriyi
indexliyoruz.Bu indexler sisteminizin yoğunluğuna verinin aktif olma süresine göre
oluşturulur.
• Sonrasında oluşturulan bu indexlenmiş veri üzerinde arama yapılır ve sphinx size
uygun kriterlere göre primary key veya istediğiniz bir key değerleri döner.Daha sonra
bu değerlere göre aranılan veri DB den veya istenilen başka bir kaynaktan sağlanır.
22. AUTOCOMPLETEAUTOCOMPLETE
• Genellikle kullanıcı arama sorgularını veritabanı üzerinde LIKE kullanarak işleriz, text
alanlarda da MATCH() AGAINST ile fulltext search yaparız. Hatta bazen SOUNDEX de
kullandığımız olmuştur ve bunu basit bir eşleme işi için kullanırız.
• Özellikle gelişmiş e-ticaret sistem ve/veya sitelerini teknik açıdan incelerseniz
(Magento iyi bir örnek) sadece arama yapmak değil kullanıcı anlamaya ve yardımcı
olmaya yönelik birçok optimizasyon yapıldığını rahatlıkla görebilirsiniz. Mesela
arama kelimeleri için eşanlamlı sözcük listesi kullanılır. Kullanıcı sorgusu öncelikle
bu kelimelerin olduğu tabloda taranır ve değiştirilerek yukarıdaki arama yöntemi ile
devam edilir. Mesela kullanıcı Karnıbahar araması yaptığında biz
bunu Karnabahar olarak değiştirip (düzeltme) aramayı bu şekilde sürdürürüz.
Kullanıcı TV araması yaptığında Televizyon olarak yine bu tablo yardımıyla
değiştiririz (eşanlamlı sözcük).
23. AUTOCOMPLETEAUTOCOMPLETE
• Bunun yanı sıra yine Magento üzerinde bir örneğini görebileceğiniz bazı performans
ve optimizasyonlar görebiliriz. Buna en iyi örnek Magento catalogsearch_fulltext
tablosudur. Bu tabloda ürün özelliklerinden aranmasını istediğiniz özellik değerleri
yatay halde tek satırda tutulur.
• Çünkü özellikle biraz gelişmiş sistemler bile yönetim panelinde esneklik sağlamak
için verilerin önemli bir kısmı düşey olarak tutulur.
• Hâl böyle olunca bunları tek bir tabloya alıp otomatik tamamlama (auto complete)
sorgularını hızlandırmamız gerekir. Bu tablonun bir nedeni de (en azından MySQL
‘de) InnoDB arama motoru kullanan tabloda fulltext search index kullanamıyor
olmanızdır.
• Ayrıca arama kelimelerini dil işleyen bir sınıf/sistem üzerinden geçirip çekim ve
yapım eklerini atarak aramaya devam etmek istiyor da olabiliriz.
25. BOOSTİNGBOOSTİNG
• -genellikle score,birkaç farklı sorgudan score’leri birleştirerek her belge için ince
ayarla alakalı olarak kullanılır.Düşünün ki biz metin araması ile ilgili belgeleri aramak
istiyoruz ama aynı zamanda Elasticsearh yada Lucene belgelere daha fazla değinmek
istiyoruz.
• Daha fazla ağırlıkça,Elasticsearch yada Lucene belgelerin sözcük anlamına yakın daha
yüksek alakalı –score alacağız ve onlar sonuç listesinde yüksek gözükecek.
• Basit bir bool sorgusu bizim bu oldukça karmaşık mantığı şu şekilde yazmamıza
olanak sağlar.