Elasticsearch: Dile Özgü Sıralama Yöntemi

Sorun yaratalım

Kaynak: https://www.fluentin3months.com/learn-russian-cyrillic-alphabet/
docker container run --name "elastic" -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.2.2

Bursa, Çanakkale, Hatay, İstanbul ve Şanlıurfa

Ama cevap şöyle geliyor:

{
"hits": {
"hits": [
{
"_source": {
"name": "Bursa"
}
},
{
"_source": {
"name": "Hatay"
}
},
{
"_source": {
"name": "Çanakkale"
}
},
{
"_source": {
"name": "İstanbul"
}
},
{
"_source": {
"name": "Şanlıurfa"
}
}
]
}
}
C# ile karakterlerin ASCII değerlerini alıyoruz

Sorunu çözelim

docker exec -it elastic bash
elasticsearch-plugin install analysis-icu
# Asagidaki komut ile container'in ID'sini aliyoruz.
docker container ls
# Asagidaki komut ile container'i tekrar baslatiyoruz.
docker container restart [CONTAINER_ID]

icu_collation_keyword, Elasticsearch 5.5 versiyonu ve üstünde çalışmaktadır.

Bununla birlikte iki yeni property daha hayatımıza giriyor. language ve country. Bu property’ler yardımıyla ilgili alanın tr-TR kodlu kültür bilgisine göre değerlendirilmesini istiyoruz.

{
"hits": {
"hits": [
{
"_source": {
"name": "Bursa"
},
"sort": [
"ᖨ勓┠႐໠ \u0001"
]
},
{
"_source": {
"name": "Çanakkale"
},
"sort": [
"ᜁ੐攧叒䧹䐄ᨃ䘌\u0000\u0001"
]
},
{
"_source": {
"name": "Hatay"
},
"sort": [
"ᮔ及⬠႐໠ \u0001"
]
},
{
"_source": {
"name": "İstanbul"
},
"sort": [
"Ღ及⡥㔓砈〇ఖ\u0000\u0000"
]
},
{
"_source": {
"name": "Şanlıurfa"
},
"sort": [
"✁੐柧ƕਖ਼䲤Țdž\u0600\u0000\u0000"
]
}
]
}
}

Sonuç

Daha önceki Elasticsearch yazılarımda da değindiğim üzere, “arama” denilen kavram artık bir mühendislik işi. Bu mühendisliğin gerektirdiği dizaynı yaparken de tek’e ve doğru bilinen’e takılıp kaldığımızda sunulan olanakları fazlaca gözardı edebiliyoruz. Bu özellik de yine gözardı edilen özelliklerden bir tanesi diye düşünüyorum.

Kaynakça

(1) https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-fields.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