Python ve Elasticsearch Kullanımı

Selamlar. Bu yazıda sizlere Python ve Elasticsearch Kullanımı hakkında bilgi vereceğim. Önceki yazıda Axios hakkında bilgi sunmuştum.

Elasticsearch Nedir?

ElasticSearch Apache Lucene altyapısından geliştirilmiş, hafif, kolay kurulan, solraçık kaynak kodlu, ücretsiz, ölçeklendirilebilen bir arama motorudur. (Kaynak)

Python ve Elasticsearch Kullanımı

 

Python ve Elasticsearch Kullanımı

Yazıya başlamadan önce belirteyim. Bu yazıda Flask kullanacağım. Sorgularımızı Postman üzerinden göndereceğiz. Ama siz zaten gerçek dünya uygulamasında bunu çok farklı senaryolara göre şekillendireceksiniz.

Gereksinimler

Öncelikle JDK kurulu olmalı. Bu yazıda JDK / JRE nasıl kurulur gibi bir bilgi paylaşmayacağım. Tonla doküman bulunur ve dahası bu kullandığınız Linux dağıtımına, Windows’a ya da Mac OS X’e bağlı şekillerde farklılıklara sahiptir.

Eğer sisteminizde JDK yok ise kurmalısınız.

Kurulum

Yazıda Elasticsearch 6.2.1 sürümüyle anlatım yapacağım. Resmi sitede verilen download linklerinde Debian tabanlı sürümler, Fedora / RedHat ve benzeri sürümler için RPM ve Windows için MSI bulunmakta. Diğerleri içinse ZIP / TAR arşivleri yer almakta.

İndirme Linki: https://www.elastic.co/downloads/past-releases/elasticsearch-6-2-1

Eğer Ubuntu kullanıyorsanız kurulum şöyle olacak:

Java bağımlılıkları yüklü olduğu için herhangi bir hata almayacağız. Bu işlemin ardından elastic servisini başlatalım:

Başlangıç aşaması olduğu için büyük ayarlamalar yapmayacağız ama temel bazı ayarlamaları yapmaya başlamamız öğrenmemiz açısından iyi bir adım olacaktır.

Ayar dosyası elasticsearch.yml dosyasıdır. Bu dosyayı düzenleyeceğiz.

Nano ile dosyayı açtığımız için CTRL + W ile cluster.name değerini güncelleyelim istersek clusterımıza elton john adını verebiliriz. Aynı şekilde node değerini de bu dosyadan aratıp bulalım.

Bu işlemden sonra işimiz bitiyor ardından CTRL + X kombinasyonuyla kaydetmek istediğimizi belirtip gelen ekranda Y tuşuna basalım. Elasticsearch servisinin yeniden başlatılması gerekiyor.

Test için şu curl isteğini konsol ekranından verelim:

Anlaşıldığı üzere elasticsearch şu anda 9200 portunda çalışıyor ancak elasticsearch.yml dosyasında 9200 portunu aratıp özelleştirebilirsiniz. Yukarıdaki istek bana şöyle bir sonuç döndürdü.

Tabi elasticsearch için request yapılacak endpoint herkesin erişebileceği network activity ekranından takip edilebilir olmamalı. Bu nedenden dolayı da bu işlemi Python ve Flask tarafında şöyle gerçekleştirelim:

Virtualenv ile Flask ve Elasticsearch Kurulumu

Öncelikle virtualenv ile Flask kurulumunu yapalım:

ardından da elasticsearch-py modülünü kuracağız:

Detaylı bilgi: https://elasticsearch-py.readthedocs.io/en/master/

Python tarafında da bağımlılıklar yüklendi. Şimdi main.py adında bir dosya oluşturalım ve elasticsearch-py modülünü ve Flask’i import edelim.

Bu işlemden sonra Flask ve Elasticsearch modüllerini initialize edelim.

Üç adet metod yazacağız. Bu işlemler normalde böyle olmayacak ama ben sadece Elasticsearch olayını anlatıyorum.

Bu ilk index metodu elasticsearch tarafında belirttiğimiz index ve doküman tipine göre id’den sorgulama yapmamıza yardım edecek. Şu anda içerik olmadığı için boş dönecektir.

Burada bilmemiz gereken index, doc_type ve id değerleri tamamen programlanabilir durumdadır. Eğer get metodundan dönen değeri gösterecekseniz _source keyine bakmanız gerekecektir.

Bu adımda slug, title ve content adında üç adet form değerini post ettiğimizi varsayalım. Bu dönen değerleri index() metodunun body parametresine vererek yeni ekleme işlemini gerçekleştiriyoruz.

Fark ettiyseniz aynı index, aynı doküman tipi fakat farklı id ve body yani bir bakıma content diyebiliriz. Bu kısmın değişebilir olması aynı zamanda yeni indexler oluşturulabileceğinin de bir kanıtı aynı zamanda.

Dilerseniz siz de bi index oluşturun, doküman tipini değiştirin ve farklı bir slug ekleyin.

Bu arada yolladığınız değerler daha önce indexlenmişse yeni bir insert yerine version update ediliyor.

Gelelim son aşamada arama nasıl yapılıra. Bunun için üçüncü ve son metodumuzu oluşturalım:

Bu örnekte multi_match adında bir özellik kullanacağız. Yani birden fazla body keyine göre sorgulama yapabiliyor olacağız. Bir arama metnini keyword adındaki formdan gelen parametreden alacağız.

Dönen değerdeki hitslerin ikincisi json array olacak yani benzer içeriğe sahip tüm değerler listelenebilir olacaktır. Benim örneğimde şöyle bir sonuç dönüyor:

Evet tüm aşamalar bu kadar. Burada elasticsearch bir veri tabanı gibi düşünülmemeli. Ben burada bütün içeriği ekledim örnek için. Web sitesinde arama yapılabilir bölümler daha çok index için düşünülebilir.

Bu da başlık ya da content olabilir. En nihayetinde öyle karmaşık join sorgularını vs. burada çalıştırmayacaksınız.

Arama işlemlerinin veri tabanı tarafında halledilmesi gibi sorgu gerektiren noktalarda yardımcı olabilirliği önemli. Tabi bundan çok daha fazlası vardır. Bunu da siz öğrenip göreceksiniz.

Tüm Kodlar

Python ve Elasticsearch Kullanımı hakkında bahsetmiş olduğum bütün kodlar burada bulunmakta. İlgili bağımlılıklar kurulu ise aşağıdaki kod düzgün bir şekilde çalışacaktır.

Yazının tamamı bu kadar. Bu yazıda Python ve Elasticsearch Kullanımı hakkında temel olarak bilgi sahibi olduk. Ben de bu yazı ile ilk defa Elasticsearch kullanmış oldum. Yani yeni öğreniyorsanız bilgim sizinle aynı durumda. Yazıya katılması gereken ekstra bilgiler varsa ya da hatalı noktalar var ise yorumla belirtmeniz beni ziyadesiyle memnun edecektir.

Okuduğunuz için teşekkür ederim

admin

Hi. I'm Ali. I'm 23. I graduated Mehmet Akif Ersoy University from CS Related Department. I can code with all programming languages. But today I'm writing .NET and JavaScript.

You may also like...