Elasticsearch: Eş anlamlı kelimeleri nasıl yönetiriz?

Methal

Bu başlık da neyin nesi! dediğinizi duyar gibiyim. “Giriş” kelimesinin eş anlamlısı imiş. Dilimizin zenginliği, edebiyatçılarımız başta olmak üzere dil özelliklerini ve güzelliklerini aktif olarak kullanan kişiler için oldukça verimli. Ancak biz teknoloji meraklıları için tam bir kara delik!

Sorun Tespiti

  • “Doktor” kelimesinin en bilinen eş anlamlısı “hekim”.
  • “AFP” kısaltması “Fransız Basın Ajansı (Agence France Presse)” özel ismini ifade eder.
Kaynak: http://dalicetrost.com/wp-content/uploads/2013/03/abbreviation-wordle.jpg

Elasticsearch’ün Synonym (Eş anlamlı) — Abbreviation (Kısaltma) Çözümü

Biz de sistemimizde arama çözümü için Elasticsearch ürünü kullanıyoruz. Bu ürünün yapabileceklerinin sınırı ve başarısı ile ilgili internet ortamında onlarca takdire şayan içerik edinmek mümkün. Bu yazıda bunlara hiç değinmeden anahtar teslim bir çözüm üzerine çalışacağız.

Adım Adım Çözüm…

Öncelikle geliştirme ortamımızda kullanmak üzere Docker üzerinde bir elasticsearch cluster’ı oluşturalım:

  • -e “xpack.security.enabled=false”: Elasticsearch container’ı bir güvenlik önlemi ile birlikte (kullanıcı adı ve şifre) geliyor. Geliştirme ortamımda bu güvenliğe ihtiyacım olmadığı için environment variable olarak komuta dahil ediyorum.

Index Oluşturma

Aşağıdaki curl komutu ile index’imizi oluşturalım:

Örnek Kayıtları Ekleme

Aşağıdaki komutu çalıştırarak iki örnek kaydı sisteme dahil edelim:

Sonuç

Şimdi de aşağıdaki sorgu ile “tabip” kelimesini arayalım:

Bonus — 1

localhost:9200/medium_sample_index/_analyze?text=TABİP&analyzer=search&pretty=true’ şeklinde bir GET isteği yaptığınızda “TABİP” kelimesini ararken hangi token’ların üretildiğini gözlemleyebilirsiniz. Sırasıyla; sağaltman (SYNONYM) -> sağaltman (LOWERCASE) -> sagaltman (ASCIIFOLDING) -> sagaltman (WORD_DELIMETER).

Bonus — 2

http://localhost:9200/medium_sample_index/sample_type/2/_termvectors?fields=title şeklinde bir GET isteği yaptığınızda 2 id’li kayıt için oluşturulan tüm token’ları (index adlı analizden geçen) gözlemleyebilirsiniz.

Kaynakça

(1) https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html

--

--

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Selçuk Usta

Selçuk Usta

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta