<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Aranan metin.
@titleWeight: Başlık bilgisi için verilen ağırlık değeridir. Uygulamada</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Tam Metin Arama Kullanılarak Kullanıcı Deneyiminin İyileştirilmesi</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Çağdaş ÜSFEKES</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kürşat İNCE</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>HAVELSAN A.Ş.</string-name>
          <email>cusfekes@havelsan.com.tr</email>
          <email>kince@havelsan.com.tr</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ankara</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Türkiye</string-name>
        </contrib>
      </contrib-group>
      <volume>0</volume>
      <issue>67</issue>
      <fpage>313</fpage>
      <lpage>324</lpage>
      <abstract>
        <p>Enterprise search infrastructure supports searching in structural data and non-structural data with high efficiency. A well designed enterprise search infrastructure increases productivity and contributes user experience. In this work, we describe querying work items with advanced search and effect to user experience with application lifecycle management system which is located in HAVELSAN. SQL Server is used in full-text search algorithm (OKAPI BM25) and enterprise customizations. After these customizations searching and associating work items from user computers are going to faster.</p>
      </abstract>
      <kwd-group>
        <kwd>Enterprise search</kwd>
        <kwd>full-text search</kwd>
        <kwd>OKAPI BM25</kwd>
        <kwd>application lifecycle management</kwd>
        <kwd>associate work items</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriş</title>
      <p>Kurumsal uygulamaların artışına paralel olarak artan veri hacmi, bu verinin
sınıflandırılması, saklanması ve gerektiği zaman çağırılması sorunlarını ortaya çıkarmıştır.
Kurumsal uygulamalar tarafından üretilen yapısal verilerin yanında kurumsal süreçler ile
doküman, rapor, resim vb. gibi yapısal olmayan verilerin de sıklıkla üretildiği
görülmektedir. Kurumsal uygulamaların sayısı ve çeşitliliğine ek olarak farklı veri türlerinin
ilişkisel veritabanı ve içerik veritabanı gibi farklı ortamlarda saklanması verinin geri
çağırılmasını zorlaştırmaktadır. Kurumsal arama yeteneği, kurumsal bilgiye hızlı
erişim, bilginin yeniden kullanımın sağlanması, üretim emeğin tekrar etmemesi,
“mevcutta ne var” farkındalığının arttırılması, birlikte çalışmayı arttırması, kurum içine
aradığı kişiyi, uzmanı bulma amaçlarına hizmet etmektedir.</p>
      <p>Arama uygulamaları, verinin türüne göre kullanıcılara farklı arayüzler sunmaktadır.
Yapısal verilerde arama yaparken daha çok alan üzerinden arama / sorgu sihirbazı
kullanılırken, yapısal olmayan verilerde tam metin arama tercih edilmektedir. Sezgisel
arama ve öneri sistemleri ise sezgisel arayüzleri kullanıcılara arama kelimeleri
önermekte ve bilgiye erişimi hızlandırmaktadır.</p>
      <p>Bu bildiride, HAVELSAN’ın kurumsal uygulamalarından biri olan HAVELSAN
Geliştirme Ortamı (HVL-GO)’na eklenen iş öğesi öneri sistemi ve ilişkilendirme
özelliğinin geliştirilmesi ve bu özelliğin kullanıcı deneyimine etkileri anlatılmaktadır.</p>
      <p>Bildiride, sezgisel arama ve öneri sistemleri ile ilgili genel bilgi Bölüm 2’de,
HVLGO mimarisi ve mevcut arama özellikleri Bölüm 2’de, HVL-GO’ya eklenen iş öğesi
arama ve ilişkilendirme Bölüm 4’te, değerlendirme ve devam eden çalışmalar
Bölüm 5’te anlatılmaktadır.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Sezgisel Arama ve Öneri Sistemleri</title>
      <p>Standart arama yöntemleri kullanıcının çalışmak için kullanıcının sorgu kelimeleri
girerek arama yapmalarını önermektedir. Bu yöntemde arama motorları “arama”
düğmesine basıldıktan sonra sorguya eşleşen bilgileri kullanıcıya sunmaktadır.</p>
      <p>Günümüzün internet arama motorları ve bunların kurum içi uygulamaları, kullanıcı
deneyimini iyileştirmek ve aranan bilgiyi en kolay şekilde sergilemek için donanmış
durumdadır. Bu mekanizma içerisinde, kullanıcı sorgu kelimelerinin izlenmesi ve
kullanıcının arama sonuçlarına verdiği tepki, kullanıcı davranışlarının takibi yer
bulmaktadır. Bunun sonucu olarak da sezgisel arama kabiliyeti sunmak mümkün olmaktadır.
Sezgisel arama sırasında arama motorları kullanıcı sorgu kelimeleri girmeye
başladığında bu kelimeleri tamamlamakta, kelimeler için cümlecik önerileri sunmakta hatta
sorgu sonuçlarını henüz kullanıcı kelimeleri yazarken sergilemektedir. Böylelikle
kullanıcı, sorgu kelimelerine ek olarak cümlecikler tabanlı sorgu yapmayı ve hatta sorgu
kelimesi ile ilgili “başka hangi cümlecikler” kullanılabileceğini görerek sorgularını
şekillendirmektedir.</p>
      <p>
        Öneri sistemleri, kullanıcı bağlamını ve kullanıcı davranışını izleyerek kullanıcılara
yeni önerilerde bulunan sistemlerdir. Kullanıcının sorgu kelimelerine göre yerel
reklamları gösteren Google Adwords [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], kullanıcıların daha önce dinlediği şarkılara göre
yeni şarkı öneren Spotify [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] örnek olarak gösterilebilir. Bu sistemler, kullanıcı geçmiş
zamanda en çok ne dinlenmiş, kimleri izlemeye almış kimlerle arkadaş vb. gibi
kullanıcı bilgilerinden, kullanıcı eğilimlerini ortaya çıkarmakta ve kullanıcılara yeni öneriler
sunmaktadır.
      </p>
    </sec>
    <sec id="sec-3">
      <title>HAVELSAN Geliştirme Ortamı</title>
      <p>HAVELSAN kurumsal uygulamalarından biri olan HVL-GO, kuruma tümleşik
uygulama yaşam döngüsü yönetimi sunarak yazılım geliştirme sürecinin otomasyonunu
sağlamaktadır.</p>
      <p>
        Uygulama yazılımlarının fikir aşamasından itibaren geliştirme, dağıtım ve bakım
süreçlerinin tamamı Uygulama Yaşam Döngüsü Yönetimi (UYY) olarak
tanımlanmaktadır [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Uygulama yaşam döngüsü (UYY), yazılım uygulamalarına ait bütünsel yaşam
döngüsü bakışı ve geliştirme sürecinin koordinasyonunu sağlamak ve süreç çıktılarını
yönetmek amacı ile ortaya çıkmıştır. UYY, yazılım çıktılarının yüksek kalitede ve hızlı
şekilde teslim edilmesi için, yaşam döngüsü süreçlerinin otomasyonunu sağlayarak,
yazılım geliştirme sürecine izlenebilirlik ve güçlü raporlama yeteneği kazandırmaktadır
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. HAVELSAN Geliştirme Ortamı, kurum içi UYY bilincini arttırmak ve UYY
otomasyonu sağlamak için geliştirilen kurumsal bir sistemdir.
3.1
      </p>
      <sec id="sec-3-1">
        <title>HVL-GO Mimarisi</title>
        <p>HVL-GO projelere gereksinim yönetimi, tasarım yönetimi, inşa ve yayın yönetimi, test
yönetimi, değişiklik yönetimi, konfigürasyon yönetimi, görev yönetimi, proje izleme
ve bilgi havuzu fonksiyonları sunmaktadır.</p>
        <p>
          UYY fonksiyonları, HVL-GO kapsamında yer alan hazır ticari ürünlerle
sağlanmaktadır. UYY altyapısı olarak MS Team Foundation Server [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] (TFS) kurumda yaygın
olarak kullanılmaktadır. MS TFS, yazılım dünyasına iş öğesi yönetimi, inşa ve yayın
yönetimi, test yönetimi, yazılım konfigürasyon yönetimi, proje izleme ve raporlama
özellikleri sunmaktadır.
        </p>
        <p>HVL-GO genel mimarisi Şekil 1’de gösterilmektedir.</p>
        <p>Şekil 1 HVL-GO Mimarisi
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>HVL-GO İş Öğesi Yönetimi</title>
        <p>MS TFS’in kurumsal uygulamalara en büyük katkısı iş öğesi yönetimi ile
gerçekleşmektedir. Nitekim UYY’nin görev yönetimi, gereksinim yönetimi ve değişiklik
yönetimi özellikleri iş öğeleri ile sağlanmaktadır. MS TFS’in bir diğer katkısı, UYY
sürecinin izlenebilirliğin sağlanmasıdır. İş öğelerinin ve diğer özelliklere ait nesnelerin
birbirleri ile ilişkilendirilmesi ile bir proje/ürün kapsamında gereksinimden test sürecinin
sonuna kadar tüm geliştirme süreci izlenebilmektedir.</p>
        <p>HAVELSAN kapsamında UYY altyapısında yapılan uyarlamalarla elde edilen ilişki
haritası Şekil 2’de gösterilmiştir.</p>
        <p>Şekil 2 TFS İlişki Haritası</p>
        <p>UYY mimarisinde gereksinimler, test durumları, hatalar, görevler gibi farklı öğeler
“Work Item (İş Öğesi)” adındaki tek bir model olarak tutulmaktadır. Şekil 2’de bu yapı
gösterilmiştir.</p>
        <p>UYY altyapısındaki bu iş öğeleri hiyerarşik ve hiyerarşik olmayan çeşitli ilişki
tipleriyle birbirilerine bağlanabilir. Bu ilişki ve iş öğesi tiplerinin çeşidi kullanıcı
tarafından da artırılabilir. Gerekli olduğu durumlarda yeni iş öğesi tipi veya iş öğesi ilişki tipi
yaratılabilir.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>HVL-GO Yerleşik Arama Özellikleri</title>
        <p>HVL-GO’da kayıtlı iş öğelerinin sorgulanması için MS TFS hızlı arama ve sorgu
sihirbazı işlevleri sunmaktadır.</p>
        <p>HVL-GO Web istemcisinde yer alan hızlı arama kutusu, iş öğelerinin tekil
tanımlayıcı numara ile çağırılmalarına imkân sağlar. Açılan ekranda çağırılan iş öğesi ile ilgili
düzenleme yapmak mümkündür. Anahtar kelime kullanılarak hızlı arama yapılması
durumunda, anahtar kelimeler yapısal sorguya dönüştürülerek eşleşen iş öğeleri sorgu
sonucu olarak gösterilir. Bu durumda kullanıcı her bir iş öğesini açmak sureti ile işlem
yapabilir. İş öğesi numarasının bilinmesi veya iş öğesi tanımında yer alan “ayırt edici”
kelimelerin hızlı aramada kullanılması doğrudan erişimi mümkün hale getirmektedir.
İş öğesi numarasını bilmek her zaman mümkün olmayabilir. Doğru anahtar kelimelerin
seçilmemesi durumunda da arama binlerce sonuç dönebilir. Bu durumlar için daha
detaylı bir arama fonksiyonuna ihtiyaç vardır.</p>
        <p>HVL-GO Web istemcisi, sorgu sihirbazı kullanılarak iş öğelerini tanımlayan alanlar
üzerinden detaylı/yapısal arama yapılmasına imkân sağlamaktadır. Bu alanlar iş
öğelerine ait ortak alanlar olabildiği gibi uyarlama ile eklenmiş özel alanlar da olabilir.
Sorgu, alt sorgu ile desteklendiğinde iki seviyeli veya ağaç görünümünde sorgu
sonuçları elde etmek mümkündür. Sorguda kullanılan alanlara ve sorgu bağlaçlarının
kullanımına bağlı olarak sorgu sonucunda onlarca iş öğesi dönüyor olabilir.</p>
        <p>Yerleşik aramanın sezgisel arama veya iş öğesi önerisi kabiliyeti bulunmamaktadır.
Kullanıcı deneyiminin arttırılması için iş öğesi öneri sistemi geliştirilerek HVL-GO
Web arayüzüne eklenmiştir.
4</p>
        <p>
          İş Öğesi Öneri Sistemi Geliştirilmesi
UYY araçlarının gücü, sahip oldukları iş öğelerinde ve bu öğeler arasında kurulan
izlenebilirlik ilişkilerinden gelmektedir [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. HVL-GO sistemi yaygınlaşma sürecinde
kullanıcılar, iş öğeleri arasındaki ilişkinin daha kolay sağlanabilmesini istemişlerdir.
HVLGO’daki yerleşik arama özelliği belirli ölçüde bunu sağlamakla birlikte, kullanıcı
deneyimi ve sorgu sonuçlarının yorumlanması açısından zorluklar barındırmaktadır.
Arama ile iş öğelerinin bulunması ve ilişkilendirilmesi kullanıcılara çok zaman
kaybettirmektedir.
        </p>
        <p>
          UYY fonksiyonlarının iyileştirilmesi [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] kapsamında UYY altyapısına uzantı olarak
geliştirilen yeni arama özelliği ile kullanıcılara hem iş öğesi öneri sistemi hem de ileriki
aşamalarda sezgisel aramaya dönüşebilecek tam metin arama altyapısı sağlanmıştır.
        </p>
        <p>Bu bölümün devamında iş öğesi öneri sistemi geliştirme detayları yer almaktadır.
4.1</p>
        <p>Sık Kullanılan İş Öğesi Alanları
Her iş öğesi kendi içerisinde farklı alanlardan ve bu alanlar üzerindeki yetkiye bağlı
operasyonlardan oluşur. Bu alanların hepsi bir ortak havuzda bulunur. Her iş öğesine
gereken alanlar bu havuzdan seçilerek eklenir. Bir alan birden çok iş öğesinde
bulunabilir. Tıpkı iş öğeleri ve iş öğesi ilişkileri gibi yeni alanlarda kullanıcılar tarafından
tanımlanabilir. Bu alanlardan en sık kullanılanlar Tablo 1’de gösterilmiştir.</p>
        <p>Tablo 1 Sık Kullanılan İş Öğesi Alanları
Referans Adı
System.Id
System.Title
System.WorkItemType
System.Description
System.AreaPath
System.TeamProject
...</p>
        <p>Alan Adı
İş öğesi kimlik numarası
İş öğesi başlığı
İş öğesi tipi
İş öğesi açıklaması
İş öğesi alanı
İş öğesi takımı
...</p>
        <p>Veri Tipi
Integer
String
String
HTML
String
String
…</p>
        <p>MS TFS kendi üzerinde kayıtlı olan iş öğelerini bu alanlar yardımı ile sorgulamaya
yarayan WIQL (Work Item Query Language) adında SQL benzeri bir dil kullanır.
WIQL ile SQL üzerinde tanımlı olan pek çok metot kullanılabilir böylece iş öğeleri ve
gerekirse ilişkileri bu sayede sorgulanabilir.</p>
        <p>İş öğelerini oluşturan tüm alanların SQL üzerinde tanımlı bir veri tipi vardır.
Sorgulama yapılırken bu veri tiplerine göre filtreleme yapılır ve büyüklük, küçüklük vb.
operatörler kullanılır. En sık kullanılan alanların veri tipleri Tablo 1’de gösterilmiştir.</p>
        <p>Bu makalede geliştirilen uygulamada MS TFS üzerindeki iş öğesi alanlarından İş
öğesi kimlik numarası, İş öğesi başlığı ve İş öğesi açıklaması alanları kullanılmıştır.
 İş Öğesi Kimlik Numarası: İş öğesi her yaratıldığında sistem tarafından verilen
ayırıcı numaradır. 1’den başlar ve her yeni iş öğesi kaydedildiğinde değeri bir artar.
 İş Öğesi Başlığı: İş öğesi içeriğinin en net olarak belirtildiği alandır. En fazla 256
karakter uzunluğunda veri girilebilir. Tüm iş öğelerinde bulunur.
 İş Öğesi Açıklaması: İş öğesi içeriği ile ilgili başlık kısmına yazılamayacak kadar
uzun olan veya detay bilgileri içeren alandır. Veri tipi HTML (zengin metin) olduğu
için içeriğine her türlü resim, link bilgisi, font ve renk içeren yazı eklenebilir. Her iş
öğesi tipinde bulunur.</p>
        <p>Bu çalışmada iş öğesi öneri sistemi geliştirilirken iş öğesi başlığı ve iş öğesi açıklama
alanları tercih edilmiştir. Çünkü bir iş öğesinin içeriğinin ne olduğunu ve içeriği ile
ilgili detayları belirten alanlar bu alanlardır. İş öğesi kimlik numarası ise ayırıcı birer
değer olması amacıyla kullanılmıştır.
4.2</p>
        <p>TFS Uyarlamaları
İş öğesi öneri sistemi MS TFS arayüzüne ek bir bileşen olarak geliştirilmiştir. MS TFS
iş öğelerinin kullanıcılar tarafından olabildiğince esnek bir şekilde modifiye edilmesine
olanak sağlamaktadır. Kullanıcılar tarafından geliştirilen uzantılar (extension) iş öğesi
ekranında istenen yere eklenebilir. İş öğesi üzerindeki bütün alanlar, rollere tanımlanan
yetkiler ve geliştirilen uzantılar XML formatında tutulur. İş öğesi puanlama
uygulamasına ait XML içeriği şöyledir.
&lt;Control FieldName="HVL.ALM.WorkItemSuggestor" Type="Control"
Label="Work Item Suggestor" LabelPosition="Left" /&gt;</p>
        <p>
          Uygulamanın web arayüzünün geliştirilmesinde TypeScript [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] programlama dili
kullanılmıştır. TypeScript, derlendiği zaman çıktı olarak JavaScript kodu veren ve
JavaScript kodunu C programlama dili benzeri bir yaklaşımla yazmaya yarayan bir
programlama dilidir.
        </p>
        <p>Uygulamanın genel akışı Şekil 3’de gösterilmektedir. Kullanıcı yeni bir iş öğesi
kaydettiğinde iş öğesi tablosuna tüm alanlar kaydedilir. Bu sırada bir tetikleyici (trigger)
yardımı ile iş öğesinin kimlik numarası (ID), başlık ve açıklama alanları
“WorkItemSource” tablosuna kaydedilir ve indekslenir. Kullanıcı, kaydedilen iş öğesi formunu
açtığında ilgili iş öğesinin başlık bilgisi veritabanına gönderilerek öneri iş öğeleri için
arama yapılır. Arama sonuçları JSON formatına çevrilerek iş öğesi formu üzerinde
listelenir.
Şekil 3 Uygulama Akışı
4.3</p>
      </sec>
      <sec id="sec-3-4">
        <title>SQL Server Uyarlamaları</title>
        <p>MS TFS üzerinde tutulan proje ait verilerin incelenmesinden sonra iş öğesinin kimlik
numarası, başlık ve açıklama bilgileri “WorkItemSource” adlı ayrı bir veritabanı
tablosu yaratılarak bu tabloya aktarılmış ve indekslenmiştir. Ayrıca her yeni iş öğesi
yaratıldığında bu iş öğesinin kimlik numarası, başlığı ve açıklaması da bir tetikleyici
(trigger) yardımıyla “WorkItemSource” adlı tabloya aktarılmıştır.
4.3.1</p>
      </sec>
      <sec id="sec-3-5">
        <title>Veri Tablosu</title>
        <p>İndeksleme yapmak için oluşturulan “WorkItemSource” tablosunun şeması aşağıda
gösterilmiştir.</p>
        <p>CREATE TABLE [dbo].[hvl_WorkItemTitle](
[Id] [int] IDENTITY(1,1) NOT NULL,
[WorkItemId] [int] NOT NULL,
[Title] [nchar](256) NOT NULL,
[Description] [nvarchar](max) NOT NULL,
[TitleDescription] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_hvl_WorkItemTitle] PRIMARY KEY CLUSTERED (
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
ON, FILLFACTOR = 80) ON [PRIMARY]</p>
        <p>Kod Listesi 1 WorkItemSource Tablosu Şeması
Tabloya iş öğesinin kimlik numarası, başlık bilgisi ve açıklama alanları kaydedilmiştir.
Son olarak da başlık ve açıklama alanları aralarına birer boşluk karakteri konarak
birleştirilmiş ve tek bir kolon olarak kaydedilmiştir. Bunun sebebi “WorkItemSource”
tablosu üzerinde çalışacak olan “Work item ranking” uygulamasının başlık ve açıklama
alanlarında 0 ile 1 arasında değişen ağırlık oranlarına göre arama yapabilmesini
sağlamaktır. Arama algoritması ile ilgili detaylı bilgiler 4.4 bölümde yer almaktadır.
4.3.2</p>
      </sec>
      <sec id="sec-3-6">
        <title>Etkisiz Kelime Listesi</title>
        <p>
          Etkisiz kelimeler (stopwords), cümle içinde bir anlam taşıyan ancak kullanım
frekansları göz önüne alındığında tam metin aramaya değer katmayan kelimelerdir. Bu
kelimeler indeksleme işlemi sırasında göz ardı edilirler. Bu çalışmada [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]’daki etkisiz
kelime listesi kullanılmıştır.
4.4
        </p>
      </sec>
      <sec id="sec-3-7">
        <title>Tam Metin Arama</title>
        <p>
          Tam metin arama için MS SQL Server ile yerleşik olarak gelen tam metin arama
hizmetinden yararlanılmıştır [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ].
İş öğesi araması yapılırken ve sonuçlar puanlanırken veritabanı seviyesinde uyarlanmış
olan bir algoritma kullanır. Veritabanı seviyesinde indekslenmiş olan “Title”,
“Description” ve “TitleDescription” sütunları üzerinde tam metin arama yardımı ile hızlı bir
şekilde arama ve sonuçları olabilecek en yakın öğeden en uzak öğeye doğru sıralayarak
listelemek mümkündür.
        </p>
        <p>Veritabanı üzerinde tam metin arama mimarisi MS SQL Server 2008 öncesinde
bağımsız olarak çalışmaktaydı fakat sonraki sürümlerde bu yapı veritabanı mimarisi ile
birleştirilmiş ve “sql full-text filter deamon launcher” adı altında hizmet vermeye
devam etmiştir. Tam metin arama mimarisinde kullanılan veri tipleri, Char, Varchar,
Nchar, Nvarchar, Text, Ntext, İmage, Xml, varbinary(max), FileStream olarak
sıralanmaktadır.</p>
        <p>Tam metin arama mimarisi üç ana adımda oluşturulur. Bunlar:
 Tam metin kataloğu oluşturma
 Tam metin indeks oluşturma
 Tam metin indeks içeriğinin oluşturulması</p>
        <p>Yukarıdaki üç aşamayı da başarılı bir şekilde bitirdikten sonra ilgili veritabanı
tablosunun ilgili kolon veya kolonlarında tam metin arama ile arama yapmak mümkündür.
Tam metin arama üzerinde dört farklı SQL metodu kullanmak mümkündür: Contains,
ContainsTable, Freetext, FreetextTable</p>
        <p>Bu dört metottan “Contains” ve “Freetext” metotları sadece ilgili algoritmaya göre
arama sonuçlarını döndürür. Fakat “ContainsTable” ve “FreetextTable” metotları ilgili
anahtar kelimeye göre dönen her arama sonucuna dayandığı algoritmaya göre bir
sıralama puanı (rank) verir. Arama sonuçları puan bilgisine göre sıralayarak aramaya en
uygun sonuçların başlarda listelenmesini sağlanmış olur. Bu makalede “FreetextTable”
metodu kullanılmıştır. Çünkü bu metoda göre bir kelime aranırken bu kelimenin
aynısının geçtiği sonuçlarla birlikte kelimenin çoğul vb. takılarının düşmüş yalın halinin
geçtiği sonuçlarda gelecektir.</p>
        <p>
          FreetextTable metot tanımı [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] aşağıda gösterilmiştir:
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
        </p>
        <p>Kod Listesi 2 Freetexttable Kullanım Deseni
Metot tanımındaki yer tutucuların tanımı aşağıda yer almaktadır:
 table: freetexttable metodu ile arama yapılacak olan veritabanı tablosudur.
 column_name: SQL cümleciğindeki FROM tümcesinden sonra kullanılacak olan
en az bir veya birden çok kolonun tanımlandığı değişkendir.
 column_list: Birden çok kolon üzerinde freetexttable metodu ile arama yapılacağı
zaman kullanılan değişkendir. Kolon isimleri aralarına virgül konarak ve parantez
ile açılıp kapatılarak bu değişkenle tanımlanır. Eğer özel bir dil değişkeni
tanımlanmamış ise tüm kolonlar için aynı ve varsayılan dil değişkeni geçerli kabul edilir.
Kolon tipleri char, nchar, varchar, text, ntext, image, xml, varbinary veya
varbinary(max) olabilir.
 freetext_string: İndekslenmiş kolonlarda aranacak olan kelime veya kelimelerin
tanımlandığı değişkendir. Bütün bir cümle ile de tek seferde arama yapılabilir. Arama
sonunda, aramanın yapıldığı bütün cümleyle eşleşen ya da cümle içindeki bir kelime
ile eşleşen sonuçlar hesaplanan puan ile birlikte geri döner. Freetexttable metodunda
contains metodunun aksine engellenecek kelimeler listesi dikkate alınır. Örneğin
tam metin arama için tanımlanan dil İngilizce ise “and” vb. gibi kelimeler etkisiz
kelimeler listesinde görülür ve aramaya dâhil edilmez.
 language_term: İndekslenmiş verinin üzerinde arama yaparken dikkat edilmesi
gereken dil bilgisi kuralları, harici kelimeler listesi vb. Özelliklerin tanımlanması için
kullanılan değişkendir. Bu dil değişkeni sayısal, string veya hexadecimal olarak
tanımlanabilir.
 top_n_by_rank: freetexttable metodu ile dönen arama sonuçlarında her satırın bir
rank değeri bulunur. Bu sonuçlardan belli bir puandan büyük olanlar filtrelenmek
isteniyorsa “n” adlı sayısal (integer) değişken kullanılarak bu filtreleme yapılır.
Tam metin arama MS SQL Server’a eklenen alt yordam (stored procedure) ile
sağlanmaktadır. Freetexttable’ın alt yordamda kullanımı aşağıdaki gibidir:
...</p>
        <p>SELECT WorkItemId, Title, Description, FT.[rank]*@titleWeight
FROM WorkItemSource as WS inner join
freetexttable(WorkItemSource, Title, @keyword) as FT on WS.WorkItemId=FT.[key]
Union all
SELECT WorkItemId, Title, Description,
FT.[rank]*@descriptionWeight FROM WorkItemSource as WS inner
join freetexttable(WorkItemSource, Description, @keyword) as FT
on WS.WorkItemId=FT.[key]
...</p>
        <p>Kod Listesi 3 Arama Altyordamı
SQL kod parçasında kullanılan parametreler şu şekildedir:


</p>
        <p>MS SQL Server tam metin aramada OKAPI BM25 algoritmasını kullanmaktadır.
Bu algoritma ile ilgili bilgiler aşağıdaki bölümde yer almaktadır.
4.5</p>
      </sec>
      <sec id="sec-3-8">
        <title>OKAPI BM25</title>
        <p>
          Freetexttable metodu, arama sonuçlarının aranan anahtar kelime veya kelimelerle olan
yakınlık ilişkisini bulabilmek için OKAPI BM25 puanlama algoritmasını kullanır [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
OKAPI BM25 arama motorları tarafından anahtar kelimelerle aranan dokümanların
arasındaki ilgi derecesini belirli bir aralıktaki sayısal değerlere oturtmak için
tasarlanmıştır. Algoritmanın temeli 1970 ve 1980’lerde Stephen E. Robertson, Karen Spärck
Jones ve diğerleri tarafından geliştirilen olasılıksal ilgi modeli (Probabilistic relevance
model) üzerine dayanır. OKAPI BM25 algoritmasının matematiksel formülü (1) ve
(2)’de gösterildiği gibidir.
(1)
(2)
        </p>
        <p>OKAPI BM25 algoritmasındaki değişkenler aşağıdaki gibi tanımlanmaktadır:
 Q: Arama sorgusu
 q1, q2,…,qn: Arama sorgusu içerisindeki anahtar kelimeler
 D: Doküman
 |D|: Dokümanın kelime sayısı bakımından uzunluğu
 f (qi, D): Anahtar kelimenin (qi) doküman içinde geçme sıklığı
 k1, b: Optimizasyon sırasında gerektiğinde değeri değiştirilebilen serbest
parametreler. (1,2 &lt;= k1 &lt;= 2,0 ve b = 0,75)
 avgdl: Dokümanların ortalama uzunluğu
 N: Kaynaktaki toplam dokuman sayısı
 n (qi): qi anahtar kelimesinin geçtiği toplam dokuman sayısı</p>
        <p>OKAPI BM25 algoritması ve freetexttable metodu iş öğesi öneri sisteminin temelini
oluşturmaktadır.
4.6</p>
        <p>İş Öğesi Öneri Sistemi Uygulaması
İş öğesi öneri sistemi HVL-GO üzerindeki iş öğelerine uzantı olarak yazılmıştır.
Geliştirilen uygulama, HVL-GO ile birlikte web tabanlı olarak çalışmaktadır. Bu uygulama
sayesinde HVL-GO üzerinde bir iş öğesi yaratıldığında veya hazır kayıtlı bir iş öğesi
açıldığında ekran üzerindeki “İş Öğesi Önerici” alanında bu iş öğesiyle ilgili olabilecek
diğer iş öğeleri başlık ve açıklama bilgisine göre aranır ve sıralama puanı (rank)
değerlerine göre sıralanarak listelenir. Bu listeden istenen iş öğesi de üzerine tıklanarak
mevcut iş öğesi ile ilişki kurulmuş olur.</p>
        <p>Geliştirilen öneri sisteminin örnek ekran görüntüsü Şekil 4’de gösterilmektedir.
Şekil 4 İş Öğesi Öneri Sistemi Ekran Görüntüsü
Kurumlarda artan veri hacmi, kurum bilgi sistemleri genelinde yapılacak kurumsal
aramaları zorunlu hale getirmektedir. Ancak artan veri hacmi ve kullanıcı beklentileri
aramaların sezgisel olmasını, kullanıcıyı yönlendirmesini gerekmektedir. Arama
sistemleri bunun da bir adım ötesine geçerek öneri sistemleri sunmaktadır.</p>
        <p>Bu bildiride, uygulama yaşam döngüsü yönetimi altyapısı sağlayan HVL-GO
kurumsal uygulamasına eklenen iş öğelerinin öneri sistemi geliştirilmesi adımları
anlatılmıştır. İş öğesi önerisi, HVL-GO mimarisinde yer alan MS TFS uzantısı olarak
geliştirilmiş ve MS TFS ve MS SQL Server uyarlamaları ile gerçekleştirilmiştir.
Kullanıcıların yapılan geliştirmeye ilk yaklaşımları öneri sisteminin ve iş öğesi ilişkilendirmenin
kolaylaştığı yönündedir.</p>
        <p>Çalışmanın bundan sonraki aşamasında sezgisel arama altyapısının tamamlanarak
devreye alınması ve yeni arama işlevlerinin kullanıcı deneyimine ve etkinliğine
katkısının ölçülmesi planlanmıştır.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Kaynaklar</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Google</given-names>
            <surname>Adwords Reklam Hizmeri</surname>
          </string-name>
          , https://www.google.com/adwords/
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>2. Spotify Müzik Hizmeti, http://www.spotify.com/</mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Chappell</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          “What is Application Lifecycle Management”, Chappell &amp; Associates 2008
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Macit</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tüzün</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>İnce</surname>
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Aytekin</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>İ: Büyük Ölçekli Bir Organizasyonda Uygulama Yaşam Döngüsü Yönetimi Uygulama Deneyimi</surname>
          </string-name>
          ,
          <volume>8</volume>
          .
          <string-name>
            <given-names>Ulusal</given-names>
            <surname>Yazılım Mühendisliği Sempozyumu</surname>
          </string-name>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>MS</given-names>
            <surname>Team Foundation Server Ürün Sayfası</surname>
          </string-name>
          , https://www.visualstudio.com/tr-tr/products/tfsoverview-vs.aspx
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Jane</surname>
          </string-name>
          ,
          <string-name>
            <surname>C-H.; Olly</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ; Jane,
          <string-name>
            <surname>H.H.</surname>
          </string-name>
          ; Patrick,
          <string-name>
            <given-names>M.</given-names>
            ;
            <surname>Andrea</surname>
          </string-name>
          ,
          <string-name>
            <surname>Z.</surname>
          </string-name>
          “
          <article-title>Software traceability: trends and future directions”</article-title>
          ,
          <source>Proceedings of the on Future of Software</source>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Klespitz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bíró</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kovács</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <article-title>"Aspects of improvement of software development lifecycle management,"</article-title>
          <source>Computational Intelligence and Informatics (CINTI)</source>
          ,
          <year>2015</year>
          16th IEEE International Symposium on, Budapest,
          <year>2015</year>
          , pp.
          <fpage>323</fpage>
          -
          <lpage>327</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <source>Türkçe Etkisiz Kelimeler Listesi</source>
          <volume>1</volume>
          .1, http://www.turkceogretimi.com/Genel-Konular/article/541-turkce
          <article-title>-etkisiz-kelimeler-stop-</article-title>
          <string-name>
            <surname>words-</surname>
          </string-name>
          listesi-
          <volume>11</volume>
          /
          <fpage>35</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>MS</given-names>
            <surname>SQL Server Tam Metin Arama Kullanımı</surname>
          </string-name>
          , https://msdn.microsoft.com/en-us/library/ms177652(v=sql.110).aspx
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>OKAPI BM25 Wikipedia Sayfası</surname>
          </string-name>
          , https://en.wikipedia.org/wiki/Okapi_BM25
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Typescript</surname>
            <given-names>Language</given-names>
          </string-name>
          , https://www.typescriptlang.org/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>