/elasticsearch-php

Php 7.0.3 , Redis 3.2.100 , windows wamp server

Primary LanguagePHP

elasticsearch-php

Elasticsearch yapısını gerçekleyen fonksiyonlar php kullanılarak yazılmıştır.

1 - WİNDOWS KURULUMU

Öncelikle çalıştırmış olduğumuz servisleri projemize tanımlayabimek için composer kuruyoruz projemize.

  • Composer nasıl kurulur : https://getcomposer.org/Composer-Setup.exe adresinden indirilen exe next, next ile kurulur.
  • Ardından command ekranı kullanılarak composer eklenmek istenilen projeye gidilir örneğin ben wamp üzerinde proje yapıyorum
  • "cd C:\wamp64\www\elasticsearh" bu projeye gidebilirim.
  • Proje yolunu command ekranında tanıttıktan sonra "composer init" yazarak composer.json dosyamı oluturuyorum. (composer.json oluştururken bir kaç bilgi isteyecek bizden.girerek enter yapalım.)
  • Artık composer kuruldu sıra elasticsearch servisini aktif etmekte bunun için

  • https://www.elastic.co/downloads/elasticsearch adresinden elasticsearch dosyaları zip olarak indirilir.
  • İndirilen zip dosyası c:/ içerisinde açılır ve elasticsearch.bat dosyası çalıştırılır ve sürekli çalışır vaziyette bırakılır bu sayede elasticsearch servisi çalışır.
  • command ekranına "composer require elasticsearch/elasticsearch" yazarak projeme elasticsearch servisini aktif ediyorum
  • index.php dosyamın içine aşağıdaki kodları yazarak çalışıp çalışmadığını test edebilirim.

    require 'vendor/autoload.php';
    $client = Elasticsearch\ClientBuilder::create()->build();

    if ($client) {
    echo 'connected';
    }

    Önemli :

    Windows Server Üzerine Kurulum Hakkında

    Eğer elasticsearch windows server üzerine kurulmak isteniyorsa öncelikle windows üzerinde java kurulu olması gerekmektedir. Hem JDK hem JRE kurulu olmalıdır. İnternette "jre server" şeklinde aratarak indirebilirsiniz. Örneğin ben şu adresten uygun sürümü indirdim : http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html indirilen zip dosyası içeriği c:/Program Files/java.. yolu takip edilrek çıkarılır. Klasörün içerisinde bulunan jre klasörüne ait yol, örneğin : "C:\Program Files (x86)\Java\jdk1.8.0_151\jre" denetim masası üzerinden -> Sistem sekmesin içerisiden -> gelişmiş sistem ayarları takip edilerek açılan pencereden ortam değişkenleri tıklanır açılan pencerede sistem değişkenleri kısmına yeni denerek değişken adı JAVA_HOME ve değişken adresi "C:\Program Files (x86)\Java\jdk1.8.0_151\jre" olacak şekilde tanımlanır. Bu sayede elastichsearch windows server üzerinde kullanılabilir.

    Ayrıntılı Dökümana Aşağıdaki adresten ulaşabilrsiniz.

    https://github.com/ofke-yazilim/elasticsearch-php/tree/master/elasticsearch/documents

    2- elasticsearch/elasticsearch.php class fonksiyonları ve kullanımı

    elasticsearch fonksiyonlarını içeren class yükleniyor
    include 'elasticsearch.php';

    Yüklenen class tanıtılıyor

    $elasticsearch = new elasticsearch();

    elasticsearch portuna bağlantı sağlandımı test ediliyor

    $con = $elasticsearch->connectTest();

    elasticsearch portuna bağlantı sağlandi ise devam ediliyor.

    if($con=="connected"){

    Verilerin bulunduğu json alınıyor

    $json = file_get_contents("data.json"); $products = json_decode($json);

    Sonuçları alacağımız array tanımlanıyor.

    $responses = array();

    Arama işlemlerini gerçekleştireceğimiz yeni bir json oluşturuyoruz.
    Eğer daha önce aynı index ismi ile json oluşturduysanız hata veririr.

    $elasticsearch->createIndex("yeni2",$rows=array("id","hit","date","title-1","name-1"));

    Adı gönderilen index json değerini siler

    $elasticsearch->deleteIndex("yeni2");

    Elasticsearch servis üzerinde eğer gönderilen indexe sahip bir oluşum varsa özelliklerini döndürür

    $indexAbout = $elasticsearch->getIndex("yeni2","http://localhost:9200");

    Alınan index bilgileri ekrana basılıyor

    print_r($indexAbout);
    Yukarıda getIndex ile çağrılan index elastic serviste mevcut değilse 404 hatası verir
    if($indexAbout->status==404){
    İndex olmadığı için oluşturuyoruz.
    $elasticsearch->createIndex("yeni2",$rows=array("id","code","stock","name-1"));
    }

    Elastic servis üzerinde tanımlı tüm indexler ekrana basılıyor

    echo $elasticsearch->getIndexs("http://localhost:9200");

    Elasticsearch servisimiz üzerine adı index değeri demo2, tipi urunler2 olan ve içerisinde $product arrayını barındıracak json tanımlandı.

    $responses = $elasticsearch->dataSet("yeni2","urunler3",$products);

    Arama yapabilmek için yukarıda tanımlamış olduğumuz json yapısındaki verileri alıyoruz.
    Verileri aldığımız fonksiyon iki şekilde çalışır ilkinde sadece _id indexleri 0 ve 1 olanlar listelenip alınırken ikincisnde bütün veriler alınır.

    $responses = $elasticsearch->dataGet("yeni2","urunler3",array(11,51,12,13,27,97)); $responses = $elasticsearch->dataGet("yeni2","urunler3",array("full", count($products)));

    Eğer array olarak 1 adet veri gönderiyorsak aşağıdaki şekilde ekliyoruz.

    Örneğin $data = array(0=>array("id"=>210,"name-1"=>"Kesmez"))
    id değerimizi gönderirken aşağıda olduğu gibi bir fazlası gönderilmeli 210 için 211 gönderiilmeli
    Ayrıca 211 sayısının sol tarafında 1 olarak gönderilmeli
    $insert = $elasticsearch->dataSetAdd("yeni2","urunler3",1,211,"http://localhost:9200",array(0=>array("id"=>210,"name-1"=>"Kesmez"),1=>array("id"=>211,"name-1"=>"Faruk"))); //

    Elastc serviste bulunan array boyutunu verir.

    echo $elasticsearch->getCount("yeni2","urunler3","http://localhost:9200");

    Aşağıda sql sorgularında like olarak bilinen işlemin elasticsearch ile yapan fonsiyonu çalıştırır.
    Aşağıdaki sorgu id,code,name-1 sütunlarında içerisinde Bayan geçen ya da sonu 001 ile biten verileri id değerine göre büyükten küçüğe listeler.

    $responses = $elasticsearch->searchLike("*001 OR *Bayan*","yeni2","urunler3",array("id","hit","code","name-1"),array('hit' => array( 'order' => 'desc'),'name-1' => array( 'order' => 'desc')),5,1);

    Beliritlen sütun üzerinde istenilen tek bir değeri arayan fonksiyon yani id değeri 11 olan datayı getirir

    $responses = $elasticsearch->searchSingleRow(16,"yeni2","urunler3","id",1);

    id değeri 5 ile 10 arasındaki olan değerleri id değerine göre büyükten küçüğe doğru getirir 0 dan başlayarak 10 adet getirir.

    $responses = $elasticsearch->searchRange(10,5,"yeni2","urunler3","id",array('hit' => array( 'order' => 'desc')),40,1);

    id değeri 14 olan verinin name-5 ve name-3 kısmını istenilen değerler ile günceller

    $elasticsearch->dataUpdate("yeni2","urunler3",14,array("doc"=>array("name-5"=>"name5","name-3"=>"name3")),"http:localhost:9200");

    Komplex sorgular için çalıştırılan bir fonsiyondur.

    $responses = $elasticsearch->searchComplex("yeni2" ,"urunler3" ,null ,array("id","hit","code","name-1") ,"id" ,5 ,100 ,array("id"=>array("1","2","3","16")) ,array('hit' => array( 'order' => 'desc')) ,200 ,null) ;

    Veriler ekrana yazılıyor.

    echo count($responses);exit;
    print_r($responses);exit;
    var_dump($responses);exit;
    } else{
    die("Elasticsearch portuna bağlantı sağlanamadı");
    }