25 Temmuz 2018 Çarşamba

Elasticsearch Sorgular

Merhabalar,
Bu yazımda sizlere elasticsearch'te sorgulardan bildiğim kadarıyla anlatmaya çalışacağım.

Elasticsearch' te sorgular iki tiptir. İlki full-text sorgular diğeri ise term sorgularıdır. Ne demek bu derseniz, full-text sorgular için şunu söyleyebilirim; elasticsearch'e kayıtlar girilirken bir analizden geçer. Kayıt tipi text olduğunda bizler için elasticsearch bir analyze yapar. Bu analyze ise iki tiptir. İlki standart analyzer'dir ki kendisi sadece lowercase analyzer'ini kullanır. Diğeri ise bizim isteğimize göre analyze eden bir custom analyzer'dir. Bu analyzer'de ise istediğimiz şekilde metnimizi analyze edip field'lara aktarır. İşte biz bu analyze edilmiş metinler üzerinde yapacağımız ve daha fayda sağlayan sorgularımız full-text sorgularıdır. Bu sorgular, Match Query, Match Phrase Query, Match Phrase Prefix Query Multi Match Query, Common Terms Query, Query String Query ve Simple Query String Query'dir.

Match Query; bu sorgu aradığımız cümleyi kelime kelime eşleştirmeye çalışır. Ve buna göre ilişkilere göre skorlama yapar yani puan verir ve bize sonucu döndürür. Cümle içindeki kelimeleri varsayılan olarak "or" bağlacına göre yapar. Ama biz "operator" : "and" özelliğini eklersek artık "and" bağlacına göre sorgu yapacak. Örneğin; "Ahmet ÖZGÜN" diye sorgu yaptırdık. Biz eğer "or" la kullanmışsak, yani varsayılan değeri kullanmışsak "Ahmet" ya da "ÖZGÜN" ya da "Ahmet ÖZGÜN" leri getirecek. Yani şunu demiş oluyoruz: Bize en az Ahmet veya ÖZGÜN geçen text'leri bu ve getir. Bakın en az diyorum. Ama "and" kullanırsak bize sadece "Ahmet ÖZGÜN" geçenleri getir demiş oluyoruz.

Match Phrase Query; bu sorgu aradığımız cümleyi konumlarıda tutacak şekilde arama yapar. Misal olarak biz "kurt nerede" ifadesini arıyoruz. "kurt istanbul'da nerede" ifadesiyle eşleşme yapmaz. Ama yukardaki Match Query için aynı şeyi söyleyemeyiz. Match sorgusu "kurt istanbul'da nerede" ifadesini bulur. Çünkü Match sorgusu kelime kelime bakarak arama yapar. Ama Match Phrase sorgusu ise konumlarıda tutacak şekilde text içerisinde arama yapar.

Match Phrase Prefix Query; bu sorgu yukardaki Match Phrase ile aynıdır. Farkı sadece son terim için bir harf yada başlangıç harfi-kelimesi giriyoruz. Bundan sonra son girdiğimiz harf-kelimenin tamamlayıcılarını birlikte bularak getiriyor. Diyelim ki "Mehmet A" aratıyoruz. Bulunan sonuçlarda "Mehmet Ali" de çıkar, "Mehmet Aydın" da çıkar. Çünkü son harf olarak "A" yı koymuştuk.

Multi Match Query;  Bu query adı üstünde birden çok alanda match sorgusu yapan bir full-text sorgusudur. minimum_shoul_match özelliğiyle en az kaç alanda aradığımız text'i bulmamız gerekiyorsa onu sayı ile belirtebiliriz. Ayrıca match sorgularının her bir alanda nasıl davranmasını istersek yine "operator" özelliğiyle "and" ya da "or" ile belirleyebiliyoruz.

Bu yazımı müsait olduğum zamanlarda tamamlamaya çalışacağım.





Hiç yorum yok:

Yorum Gönder

Elasticsearch'te alias Olayı

Merhabalar, Bu yazımda sizlere elasticsearch'teki alias olayını aktaracağım. Diyelim ki biz yeni bir index oluşturduk. Bu index'imi...