SlideShare a Scribd company logo
ARAMA SİSTEMLERİARAMA SİSTEMLERİ
ELASTICSEARCH,SOLR,SPHNİX,BOOSTİNG VE AUTOCOMPLETE
ARAMA SİSTEMLERİARAMA SİSTEMLERİ
• ElasticSearch
• Solr
• Sphinx
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
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.
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.
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.
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.
ELASTIC SEARCHELASTIC SEARCH
• Type
• Tipleri, yine veritabanı yönetim sistemlerine kıyasla tablolar gibi düşünebiliriz.
Endeksler, bir ve birden fazla tip içerebilir
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.
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.
ELASTIC SEARCHELASTIC SEARCH
• Örnek Uygulama
• Aşamalarımız:.
• 1) Elastic’i kurmak
2) JSON’da göndereceğimiz veriyi hazırlamak
3) Veriyi Elastic’e göndermek
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
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
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.
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
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
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.
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.
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.
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.
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.
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).
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.
AUTOCOMPLETE ÖRNEKAUTOCOMPLETE ÖRNEK
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.
BOOSTİNG ÖRNEKBOOSTİNG ÖRNEK

More Related Content

Similar to Arama Sistemleri

Windows 7 Search
Windows 7 SearchWindows 7 Search
Windows 7 Search
windowsblogu
 
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15
Cihan Özhan
 
Arama Yapma
Arama YapmaArama Yapma
Arama Yapma
lasercontrolok1
 
Delphi 7
Delphi 7Delphi 7
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
SECUBE Arge Bilişim Mühendislik
 
Veri tabaniprogramlama 12.10.2012
Veri tabaniprogramlama 12.10.2012Veri tabaniprogramlama 12.10.2012
Veri tabaniprogramlama 12.10.2012
Sevdanur Genc
 
Temel SEO Eğitimi
Temel SEO EğitimiTemel SEO Eğitimi
Temel SEO Eğitimi
Uğur Eskici
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnıMustafa Tepe
 
Oracle Mimarisi "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"
Oracle Mimarisi  "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"Oracle Mimarisi  "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"
Oracle Mimarisi "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"Anar Godjaev
 
Oracle ile tanisalim
Oracle ile tanisalimOracle ile tanisalim
Oracle ile tanisalim
Mine Özdemir
 
MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
Cihan Özhan
 
Bağlı Veri Bulutu Üzerinde Yazılım Geliştirme
Bağlı Veri Bulutu Üzerinde Yazılım GeliştirmeBağlı Veri Bulutu Üzerinde Yazılım Geliştirme
Bağlı Veri Bulutu Üzerinde Yazılım Geliştirme
Tayfun Gökmen Halaç
 
İlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQLİlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQL
Murat Azimli
 
Nosql & MongoDB
Nosql & MongoDBNosql & MongoDB
Nosql & MongoDB
Serdar Buyuktemiz
 
Mongodb-Adem
Mongodb-AdemMongodb-Adem
Mongodb-Adem
Adem Ayas
 
GraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
GraphDb ve Neo4j Teknolojilerinin Yüzeysel AnlatımıGraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
GraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
motorfatih4
 
Ders_1
Ders_1Ders_1
Ders_1
ozgur_dolgun
 

Similar to Arama Sistemleri (20)

Windows 7 Search
Windows 7 SearchWindows 7 Search
Windows 7 Search
 
Windows 7 ile Search (Arama)
Windows 7 ile Search (Arama)Windows 7 ile Search (Arama)
Windows 7 ile Search (Arama)
 
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15
 
Arama Yapma
Arama YapmaArama Yapma
Arama Yapma
 
Delphi 7
Delphi 7Delphi 7
Delphi 7
 
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
Dokuman Yonetimi Sistemi CubeBox-SAYS (Sayisal Arsiv Yonetimi)
 
Veri tabaniprogramlama 12.10.2012
Veri tabaniprogramlama 12.10.2012Veri tabaniprogramlama 12.10.2012
Veri tabaniprogramlama 12.10.2012
 
Temel SEO Eğitimi
Temel SEO EğitimiTemel SEO Eğitimi
Temel SEO Eğitimi
 
hafta1
hafta1hafta1
hafta1
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnı
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnı
 
Oracle Mimarisi "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"
Oracle Mimarisi  "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"Oracle Mimarisi  "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"
Oracle Mimarisi "Orneklerle Oracle 11g R2 ve Genel kavramlar isimli KItabdan"
 
Oracle ile tanisalim
Oracle ile tanisalimOracle ile tanisalim
Oracle ile tanisalim
 
MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
 
Bağlı Veri Bulutu Üzerinde Yazılım Geliştirme
Bağlı Veri Bulutu Üzerinde Yazılım GeliştirmeBağlı Veri Bulutu Üzerinde Yazılım Geliştirme
Bağlı Veri Bulutu Üzerinde Yazılım Geliştirme
 
İlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQLİlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQL
 
Nosql & MongoDB
Nosql & MongoDBNosql & MongoDB
Nosql & MongoDB
 
Mongodb-Adem
Mongodb-AdemMongodb-Adem
Mongodb-Adem
 
GraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
GraphDb ve Neo4j Teknolojilerinin Yüzeysel AnlatımıGraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
GraphDb ve Neo4j Teknolojilerinin Yüzeysel Anlatımı
 
Ders_1
Ders_1Ders_1
Ders_1
 

Arama Sistemleri

  • 2. ARAMA SİSTEMLERİARAMA SİSTEMLERİ • ElasticSearch • Solr • Sphinx
  • 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.
  • 11. ELASTIC SEARCHELASTIC SEARCH • Örnek Uygulama • Aşamalarımız:. • 1) Elastic’i kurmak 2) JSON’da göndereceğimiz veriyi hazırlamak 3) Veriyi Elastic’e göndermek
  • 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.