Merhabalar,
Bu yazımda inşaallah Synonym kelimeleri yani eşanlamlı yada aranılabilir bazı kelimelerin istediğimiz yada belirlediğimiz kelime yada kelime grupları şeklinde aranmasını isteyebiliriz. Bu durumda işte kullanacağımız şey synonym kelimelerdir. Bu kelimeleri kullanırken dikkat etmemiz gereken önemli bir nokta var. Birden fazla kelime yani cümle şeklinde olan kelimeleri girmemek. Çünkü arama yaparken en uzun kelimeyi bulup ona göre arama yaptığından dolayı biz böyle cümleleri önermiyoruz. Misal olarak, arı balı, çiçek balı dedik. Bakın burada iki kelimelik gruplarımız var. Bunları işte düzeltmemiz gerekiyor. Arı balı değil de arı, bal, balı, çiçek, balı şeklinde.
Bu yazımda inşaallah Synonym kelimeleri yani eşanlamlı yada aranılabilir bazı kelimelerin istediğimiz yada belirlediğimiz kelime yada kelime grupları şeklinde aranmasını isteyebiliriz. Bu durumda işte kullanacağımız şey synonym kelimelerdir. Bu kelimeleri kullanırken dikkat etmemiz gereken önemli bir nokta var. Birden fazla kelime yani cümle şeklinde olan kelimeleri girmemek. Çünkü arama yaparken en uzun kelimeyi bulup ona göre arama yaptığından dolayı biz böyle cümleleri önermiyoruz. Misal olarak, arı balı, çiçek balı dedik. Bakın burada iki kelimelik gruplarımız var. Bunları işte düzeltmemiz gerekiyor. Arı balı değil de arı, bal, balı, çiçek, balı şeklinde.
Evet, synonym kullanabilmemiz için öncelikle index oluşturmamız
gerekiyor. Adı üstünde synonym token filter. Yani bu filtreler index oluşturulurken
tanımlanır ve kullanılır. Evet şimdi indeximizi oluşturuyoruz.
PUT yeniindex
{
"settings" : {
"index" :{
"number_of_shards" :
"3",
"number_of_replicas" : 1},
"analysis" : {
"analyzer" : {
"synonym_analyzer" : {
"tokenizer" :
"standard",
"filter" :
"synonymFilter"
}
},
"filter" : {
"synonymFilter" : {
"type" :"synonym",
"synonyms" :
["fare,mouse","keyboard,klavye"]
}
}
}
},
"mappings" : {
"urunler" : {
"properties" : {
"urun_ismi" : {
"type" : "text",
"analyzer"
: "synonym_analyzer"
}
}
}
}
}
Şunu belirteyim. Analyzer’ı mapping oluştururken de
tanımlayabiliriz ya da sorgu yaparken analyzer deyip ismini girerekte kullanabiliriz.
Ayrıca synonym kelimelerimizi ayrı bir txt dosyası oluşturup “synonyms” yerine “synonyms_path”
diye belirterek elasticsearch.yml’nin bulunduğu klasöre bir klasör açıp
içerisine synonym.txt i yerleştirip yolunu belirtebiliriz. Misal olarak
synonyms/synonym.txt şeklinde olabilir.
Synonym txt oluştururken genel olarak şunlara dikkat etmek gerekir.
Eşanlamlı kelimeleri yan yana ve aralarına virgül konulur. fare, mouse gibi. Bir alt satıra geçerek ikinci synonym kelime yazılır.
Eşanlamlı kelimeleri yan yana ve aralarına virgül konulur. fare, mouse gibi. Bir alt satıra geçerek ikinci synonym kelime yazılır.
mouse, fare
klavye, keyboard
klavye, keyboard
gibi.
Bir diğer noktada bir kelime aratılırken o kelimenin aranmamasını isteyebiliriz. Bunun için ise şöyle bir metod kullanılır.
Bir diğer noktada bir kelime aratılırken o kelimenin aranmamasını isteyebiliriz. Bunun için ise şöyle bir metod kullanılır.
mouse => fare
keyboard => klavye
keyboard => klavye
PUT yeniindex
{
"settings" : {
"index" :{
"number_of_shards" :
"3",
"number_of_replicas" : 1},
"analysis" : {
"analyzer" : {
"synonym_analyzer" : {
"tokenizer" :
"standard",
"filter" :
"synonymFilter"
}
},
"filter" : {
"synonymFilter" : {
"type" :"synonym",
"synonyms_path"
: “synonyms_kelimeler/synonym.txt”,
}
}
}
},
"mappings" : {
"urunler" : {
"properties" : {
"urun_ismi" : {
"type" : "text",
"analyzer" :
"synonym_analyzer"
}
}
}
}
}
Bir örnek yapalım.
GET
yeniindex/_analyze
{
"analyzer":
"synonym_analyzer",
"text": ["klavye
getir","fare ile oynama"]
}
Burası analiz edeceğimiz kısım. Dönen sonuç aşağıda…
{
"tokens": [
{
"token": "klavye",
"start_offset": 0,
"end_offset": 6,
"type":
"<ALPHANUM>",
"position": 0
},
{
"token": "keyboard",
"start_offset": 0,
"end_offset": 6,
"type": "SYNONYM",
"position": 0
},
{
"token": "getir",
"start_offset": 7,
"end_offset": 12,
"type":
"<ALPHANUM>",
"position": 1
},
{
"token": "fare",
"start_offset": 13,
"end_offset": 17,
"type":
"<ALPHANUM>",
"position": 102
},
{
"token": "mouse",
"start_offset": 13,
"end_offset": 17,
"type": "SYNONYM",
"position": 102
},
{
"token": "ile",
"start_offset": 18,
"end_offset": 21,
"type":
"<ALPHANUM>",
"position": 103
},
{
"token": "oynama",
"start_offset": 22,
"end_offset": 28,
"type":
"<ALPHANUM>",
"position": 104
}
]
}
Hiç yorum yok:
Yorum Gönder