Algolia ile arama altyapınızı güçlendirin

Tolga Gezginiş
3 min readMay 20, 2016

--

Uygulamalarınıza arama altyapısı hizmeti sağlayan Algolia, San Fransisco merkezli bir şirkettir. Bu yazıda Algolia’nın sağladığı faydaları, performansı ve Ruby on Rails uygulamalarınıza nasıl entegre edebileceğinizden bahsedeceğim. Sizde bu yazı sonrasında uygulamanıza daha esnek ve güçlü bir arama yeteneği kazandırabilirsiniz.

Ülkemizde daha çok aldığı yatırımlarla tanınan Algolia aslında 2012 yılından beri hizmet veriyor. Ölçeklenebilir yapısı, hızı, sunduğu güzel özellikleri ile Algolia’ya şans vermenizi öneririm.

Öne Çıkan Özellikleri

  • Gelişmiş yönetim paneli
  • Canlı destek
  • Gelişmiş facet yapısı
  • Detaylı sıralama kontrolü
  • Düşük response time
  • Koordinatlar ile lokasyon bazlı arama
  • Detaylı ve bir çok dilde dökümantasyon

Fiyatlandırma

  • Hacker (10k kayıt, 100k operasyon): Ücretsiz
  • Starter (100k kayıt, 1M operasyon): $49 / ay
  • Growth (1M kayıt, 10M operasyon): $229 / ay
  • Pro (5M kayıt, 50M operasyon): $649 / ay

Detaylar için: https://www.algolia.com/pricing

Ruby on Rails Entegrasyonu

Entegrasyona başlamak için öncelikle Algolia’da bir hesap açmanız ve uygulamanızın aktif olduğundan emin olmanız gerekir.

algoliasearch-rails paketini Gemfile’a ekleyin;

gem "algoliasearch-rails"

ve konsolda çalıştırın;

bundle install

config/initializers/algoliasearch.rb dosyasını oluşturarak APPLICATION_ID ve API_KEY değerlerini ekleyin;

AlgoliaSearch.configuration = { application_id: "•••••••••", api_key: "•••••••••" }

Proje genelinde yapılan konfigürasyonlar bu şekilde. Bundan sonra yapacağımız işlemler arama yaptırmak istediğimiz modeller için ayrı ayrı olacaktır.

Model ayarları

Örnek olarak Post isimli bir modelimiz olduğunu varsayalım; bu model title, body, author_id, keywords alanlarına sahip, blog yazılarının yer aldığı bir model olsun. Bu modele Algolia altyapısını kullanarak arama özelliği kazandıralım.

Not: Bu kısımda yapılan tüm ayarları Algolia Dashboard üzerinden de yapılabiliyor ancak panelden yapılan değişikliklerin model reindex yapıldığında sıfırlandığını unutmayın.

Aşağıdaki kod bloğunda da göreceğiniz şekilde, AlgoliaSearch sınıfını dahil edip model bazlı konfigürasyonları tanımlıyoruz;

class Post < ActiveRecord::Base
include AlgoliaSearch
belongs_to :author algoliasearch do
attribute :title, :body, :keywords, :author_id
add_attribute :author_name
end
def author_name
author.name
end
end

Arama yapıldığında dikkate alınacak alanları attribute kısmında tanımlıyoruz, relation yapılan modeldeki alanları dahil etmek için de özel metod yazıp add_attribute kısmına ekleyerek arama kriterlerinize dahil edebilirsiniz.

Not: Attribute kısmına yazılan alanların hangi sırada olduğu arama sonuçlarının sıralamasına da etki etmektedir.

Facets

Son olarak modelimizde hızlı bir şekilde filtreleme yapabilmek için author_id alanı için facet ekleyelim.

class Post < ActiveRecord::Base
include AlgoliaSearch
belongs_to :author algoliasearch do
attribute :title, :body, :keywords, :author_id
add_attribute :author_name
attributesForFaceting [:author_id]
end
def author_name
author.name
end
end

İndeksleme

Modelde yaptığınız değişiklerden sonra sıra geldi verilerimizi Algolia’ya aktarıp aramaya hazır hale getirmeye.

Konsolde uygulamanızın olduğu dizinle indekslemeyi başlatıyoruz;

Post.reindex

Arama

İndeksleme bittikten sonra search metoduyla arama yapabilirsiniz.

posts = Post.search("foo")posts.hits

Not: Uygulamanızda search ismini kullanan farklı bir gem varsa (örn: Ransack) çakışmayı önleme amaçlı olarak algolia_search metodunu da kullanabilirsiniz.

Facet kullanarak arama

posts = Post.search("foo", { facets: [:author_id], facetFilters: ["author_id: 3"] })posts.hits

Yukarıdaki arama metodu ile Algolia “foo” kelimesiyle eşleşen ve yazar id’si 3 olan yazıları döndürmektedir.

Pagination

Algolia Rails gem’i kaminari ve will_paginate sayfalama altyapılarını destekliyor. Sayfalamayı aktif hale getirmek için konfigürasyon dosyasında aşağıdaki şekilde değişiklik yapmalınız;

AlgoliaSearch.configuration = { application_id: "•••••••••", api_key: "•••••••••", pagination_backend: :will_paginate }# pagination_backend değeri will_paginate ya da kaminari olabilir.

Artık arama sorgumuzda hitsPerPage ve page parametrelerini kullanarak yazılarda sayfalama yapabiliriz;

posts = Post.search("foo", { hitsPerPage: (params[:page_size] || 20), page: (params[:page] || 1) })posts.hits

Algolia’nın tüm özelliklerini, indeksleme, sıralama ve arama ile ilgili detayları incelemek ve kullanmak için Ruby on Rails dökümantasyonuna göz atabilir, takıldığınız ya da merak ettiğiniz kısımlarda da bana mail ile ulaşabilirsiniz. (tolga@gezginis.com)

Son olarak farkettiğiniz üzere blogumu teknik yazılar yazacağım şekilde konumlandırarak Medium’a taşıdım. Bundan sonraki yazılarımdan haberdar olmak için beni Medium’da takip edebilirsiniz.

--

--