Bu yazımızda WordPress aramalarıni Elasticsearch üzerinden nasıl gerçekleştirebileceğimizi anlatacağım.
Elasticsearch, full text arama sunan bir araçtır, java tabanlı çalışır, verileri json formatında tutar ve güzel bir rest api sunar.
WordPress’te arama yaptığımız zaman içerikler veritabanindan pahalı bir sorgu türü olan “LIKE” ile aranır, “like” lı sorguların dezavantajı, siteniz büyüdükçe veritabanı üzerindeki yük artacaktır, diğer taraftan isabetli sonuç bulma olasılıği Elasticsearch’e göre daha zayıftır. İşte bu sebeplerden ötürü arama işlerini Elasticsearch’e devretmek özellikle ziyaretçisi yada içerik sayısı fazla olan sitelerde mantıklı olacaktır.
Gelelim Kurulumuna;
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### Install OpenJDK | |
cd ~ | |
sudo apt-get update | |
sudo apt-get install openjdk-7-jre-headless -y | |
### Download and Install ElasticSearch | |
### Check http://www.elasticsearch.org/download/ for latest version of ElasticSearch and replace wget link below | |
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.1.deb | |
sudo dpkg -i elasticsearch-1.5.1.deb | |
### Install the Java Service Wrapper for ElasticSearch | |
curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz | |
sudo mkdir /usr/local/share/elasticsearch | |
sudo mkdir /usr/local/share/elasticsearch/bin | |
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/ | |
rm -Rf *servicewrapper* | |
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install | |
sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch | |
### Start ElasticSearch | |
sudo service elasticsearch start | |
### Make sure service is running | |
curl http://localhost:9200 | |
### Should return something like this: | |
#{ | |
# "status" : 200, | |
# "name" : "Storm", | |
# "version" : { | |
# "number" : "1.3.1", | |
# "build_hash" : "2de6dc5268c32fb49b205233c138d93aaf772015", | |
# "build_timestamp" : "2014-07-28T14:45:15Z", | |
# "build_snapshot" : false, | |
# "lucene_version" : "4.9" | |
# }, | |
# "tagline" : "You Know, for Search" | |
#} | |
Bu gist’teki adımları Ubuntu/ Debian tabanlı işletim sisteminde gerçekleştirirseniz, hem Elasticsearch’ü kurmuş hemde, servis olarak tanımlamış olacaksınız. (Yani “service elasticsearch {start|stop|status…}” şeklinde kullanabileceksiniz)
WordPress Tarafındaki İşler
Elasticsearch’ü kurduk, servisi ayağa kaldırdık sıra geldi WordPress ile Elasticsearch’ü konuşturmaya.
Elasticsearh’ün sitesinde önerdiği eklenti şu anki WordPress versiyonlarıyla pek uyumlu değil, o yüden o tavsiyeye kulak asmıyoruz ve “Fantastic ElasticSearch” eklentisini indirip kuruyor, ve ardından aktifleştiriyoruz.
Sıra geldi eklentiyi yapılandırmaya;
WordPress Integration Bu adımında hangi arşiv sayfalarında ve yazı türünde kullanacağımızı seçip, entegrasyon durumunu aktif/pasif yapabiliyoruz.
Server Settings: Bu adımda sunucu adresi, index adı ve okuma/yazma zaman aşımı değerlerini belirlememiz gerekiyor.
Index oluşturmak için terminalden
curl -XPUT ‘http://localhost:9200/wp/’
komutunu çalıştırmanız yeterli olacaktır. (“wp” yerine farkli bir index adı verebilirsiniz tabii)
Content Indexing: Bu adımda nelerin indexleneceğini seçiyoruz.
Field mapping: Indexlenecek değerlerin numeric olup olmadığını işaretleyebilir, arama kelimesiyle bire bir eşleşme istiyorsak “non analyzed field” olarak işaretleyebiliriz. (Ben hiç birşey seçmedim bu adımda)
Result Scoring: Burada tölerans değerini belirliyoruz, örnegin “Ahmet” yerine “Ahmat” yazan biri de “Ahmet” eşleşmesini bulabilmesi için. Buradaki her kabul ettiğimiz hatalı giriş için “Fuzziness Amount” u artırmamız gerekmektedir. Onun altındaki değerlerde hangi field’da ne kadar sapmaya izin verdiğimizi belirlememizi sağlıyor.
(Daha kesin sonuçlar için bu değerleri düşük tutmanızda fayda var)
Manage Index: Bu kısımda zaten iki seçenek var, “wipe data” ile indexin içini boşaltabilir, “re-index data” ile indexleme işlemini baştan gerçekleştirebilirsiniz.
Artik WordPress tarafında da işleri bitirdiğimize göre re-index data ile indexleme işlemini başlatabiliriz.
Gelelim eklentinin sunduğu diğer özelliklere;
- Elasticsearch sunucusunda problem çıkması durumunda WordPress’in varsayılan arama özelliğine geri dönüyor.
- Yeni içerik eklendiğinde, güncellendiğinde veya silindiğinde index’i güncelliyor.
- Custom search için faceting adında bir api sunuyor.
Tüm işlem bu kadar 🙂 Umarım faydalı olmuştur.
Bir yanıt yazın