Azure SQL'den verileri dizine SQL
Bu makalede bir Azure SQL dizin SQL yapılandırarak içeriği ayıklar ve bu dizinde aranabilir hale Azure Bilişsel Arama. Bu iş akışı, Azure Bilişsel Arama bir arama dizini oluşturur ve Azure SQL Veritabanı ve Azure yönetilen örneklerinden ayıklanan mevcut SQL yükler.
Bu makalede dizin oluşturma özelliklerini kullanma mekanizmalarına yer ve aynı zamanda yalnızca Azure SQL Veritabanı veya yönetilen SQL (tümleşik değişiklik izleme gibi) ile kullanılabilen özellikler de açıklanmıştır.
Şu istemcilerden herhangi birini kullanarak SQL azure SQL dizinesi kurabilirsiniz:
- Azure portalı
- Azure Bilişsel Arama REST API
- Azure Bilişsel Arama .NET SDK'sı
Bu makalede REST API'leri lanmıştır.
Önkoşullar
Veriler tek bir tablodan veya görünümden kaynaklandığını gösterir. Veriler birden çok tablo arasında dağılmışsa verilerin tek bir görünümünü oluşturabilirsiniz. Görünümü kullanmanın dezavantajı, bir dizini artımlı değişikliklerle yenilemek SQL Server tümleştirilmiş değişiklik algılamayı kullanamayabilecek olmasıdır. Daha fazla bilgi için aşağıdaki Değiştirilen ve Silinen Satırları Yakalama'ya bakın.
Veri türleri uyumlu olmalıdır. Çoğu ama tüm SQL türleri bir arama dizininde desteklanmaz. Liste için bkz. Eşleme veri türleri.
Bir yönetilen SQL genel uç nokta üzerinden olmalıdır. Daha fazla bilgi için bkz. Genel uç nokta üzerinden dizin oluşturma bağlantıları.
Azure SQL Server makineye bağlantı kurmak için güvenlik sertifikasının el ile ayarlanmış bir şekilde gerçekle bağlantısı gerekir. Daha fazla bilgi için bkz. Azure VM'SQL Server dizine dizin oluşturma bağlantıları.
Gerçek zamanlı veri eşitleme bir uygulama gereksinimi değildir. Dizin oluşturma, tabloyu en fazla beş dakikada bir yeniden dizine alır. Verileriniz sık değişiyorsa ve bu değişikliklerin dizine saniyeler veya dakikalar içinde yansıt kullanılması gerekirse, güncelleştirilmiş satırları doğrudan REST API .NET SDK'sı ile birlikte kullanılması önerilir.
Artımlı dizinleme mümkündür. Büyük bir veri kümeye sahip ve dizinleyiciyi bir zamanlamayı çalıştırmayı planlıyorsanız, Azure Bilişsel Arama, değiştirilen veya silinen satırları verimli bir şekilde tanımlayabilirsiniz. Artımlı olmayan dizine yalnızca isteğe bağlı olarak dizinleme (zamanlamada değil) veya 100.000'den az satır dizinleme işlemiyle izin verilir. Daha fazla bilgi için aşağıdaki Değiştirilen ve Silinen Satırları Yakalama'ya bakın.
Azure Bilişsel Arama, SQL Server ve parolanın bağlantı dizesinde sağlanmıştır. Alternatif olarak, yönetilen kimlik ayarlayarak bağlantıda kimlik bilgilerini atlayarak Azure rollerini kullanabilirsiniz. Daha fazla bilgi için bkz. Yönetilen kimlik kullanarak dizin oluşturma bağlantısı ayarlama.
Azure SQL Indexer oluşturma
Veri kaynağını oluşturun:
POST https://myservice.search.windows.net/datasources?api-version=2020-06-30 Content-Type: application/json api-key: admin-key { "name" : "myazuresqldatasource", "type" : "azuresql", "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" }, "container" : { "name" : "name of the table or view that you want to index" } }Bağlantı dizesi aşağıdaki biçimlerden birini takip eder:
- Bağlantı dizesini Azure portal ; seçeneğini
ADO.NET connection stringkullanın. - Aşağıdaki biçime sahip bir hesap anahtarı içermeden yönetilen kimlik bağlantı
Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;dizesi: . Bu bağlantı dizesini kullanmak için yönetilen kimlik kullanarak bir dizine dizin Azure SQL Veritabanı ayarlama yönergelerini izleyin.
- Bağlantı dizesini Azure portal ; seçeneğini
Henüz Azure Bilişsel Arama hedef dizin dizini oluşturun. Portalı veya Dizin Oluşturma API'sini kullanarak dizin oluşturabilirsiniz. Hedef dizininizin şemasının kaynak tablonun şemasıyla uyumlu olduğundan emin olun. Bkz. SQL ile Azure Bilişsel Arama veri türleri arasında eşleme.
Dizine bir ad vererek ve veri kaynağı ile hedef dizine başvurarak dizine oluşturun:
POST https://myservice.search.windows.net/indexers?api-version=2020-06-30 Content-Type: application/json api-key: admin-key { "name" : "myindexer", "dataSourceName" : "myazuresqldatasource", "targetIndexName" : "target index name" }
Bu şekilde oluşturulan bir dizin oluşturan bir zaman çizelgesine sahip değildir. Oluşturulduğunda otomatik olarak bir kez çalışır. Bir dizin oluşturma isteği çalıştırarak herhangi bir zamanda yeniden çalıştırabilirsiniz:
POST https://myservice.search.windows.net/indexers/myindexer/run?api-version=2020-06-30
api-key: admin-key
Dizin oluşturma davranışının toplu iş boyutu ve dizin oluşturma yürütmesi başarısız olmadan önce kaç belge atlanabilir gibi çeşitli yönlerini özelleştirebilirsiniz. Daha fazla bilgi için bkz. Dizin Oluşturma API'si.
Azure hizmetlerinin veritabanınıza bağlanmasına izin verebilirsiniz. Bunun nasıl yapılır yönergeleri için bkz. Azure'dan bağlanma.
Dizin oluşturma durumunu ve yürütme geçmişini (dizine alan öğe sayısı, hatalar vb.) izlemek için bir dizin oluşturma durum isteği kullanın:
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2020-06-30
api-key: admin-key
Yanıtın aşağıdakine benzer olması gerekir:
{
"@odata.context":"https://myservice.search.windows.net/$metadata#Microsoft.Azure.Search.V2015_02_28.IndexerExecutionInfo",
"status":"running",
"lastResult": {
"status":"success",
"errorMessage":null,
"startTime":"2015-02-21T00:23:24.957Z",
"endTime":"2015-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
"executionHistory":
[
{
"status":"success",
"errorMessage":null,
"startTime":"2015-02-21T00:23:24.957Z",
"endTime":"2015-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
... earlier history items
]
}
Yürütme geçmişi, en son tamamlanan en fazla 50 yürütmeyi içerir ve bunlar ters kronolojik sırada sıralanır (en son yürütme yanıtta ilk sırada gelir). Yanıtla ilgili ek bilgileri Dizin Oluşturma Durumunu Al'da bulabilirsiniz
Dizin oluşturmaları bir zaman çizelgesinde çalıştırma
Ayrıca dizin zamanlayıcıyı belirli bir zaman çizelgesinde düzenli aralıklarla çalıştıracak şekilde de ayarlayabilirsiniz. Bunu yapmak için, dizin oluşturıcıyı oluştururken veya güncelleştirerek schedule özelliğini ekleyin. Aşağıdaki örnekte dizine güncelleştirmeyi gösteren bir PUT isteği gösterilmiştir:
PUT https://myservice.search.windows.net/indexers/myindexer?api-version=2020-06-30
Content-Type: application/json
api-key: admin-key
{
"dataSourceName" : "myazuresqldatasource",
"targetIndexName" : "target index name",
"schedule" : { "interval" : "PT10M", "startTime" : "2015-01-01T00:00:00Z" }
}
interval parametresi gereklidir. Aralık, ardışık iki dizin oluşturma yürütmesi başlangıcı arasındaki zamanı ifade eder. İzin verilen en küçük aralık 5 dakikadır; en uzun olan bir gün olur. XSD "dayTimeDuration" değeri (ISO 8601 süre değerinin kısıtlanmış bir alt kümesi) olarak biçimlendiril olmalıdır. Bunun deseni şu şekildedir: P(nD)(T(nH)(nM)) . Örnekler: PT15M 15 dakikada bir, PT2H 2 saatte bir.
Dizin oluşturma zamanlamalarını tanımlama hakkında daha fazla bilgi için bkz. Azure Bilişsel Arama için dizin Azure Bilişsel Arama.
Yeni, değiştirilmiş ve silinmiş satırları yakalama
Azure Bilişsel Arama, tablonun tamamını yeniden dizine alamamak veya dizin oluşturma her çalıştırıcısı her çalıştırıcıda görüntülemek zorunda kalmamak için artımlı dizinleme kullanır. Azure Bilişsel Arama artımlı dizinlemeyi desteklemek için iki değişiklik algılama ilkeleri sağlar.
SQL Tümleşik Değişiklik İzleme İlkesi
Veritabanınız SQL izlemeyi destekliyorsa,tümleşik SQL İlkesi'nin Değişiklik İzleme öneririz. Bu en verimli ilkedir. Buna ek olarak, Azure Bilişsel Arama açık bir "kalıcı silme" sütunu eklemenize gerek kalmadan silinen satırları tanımlamanıza olanak sağlar.
Gereksinimler
- Veritabanı sürümü gereksinimleri:
- azure SQL Server 2012 SP3 ve sonraki bir SQL Server kullanıyorsanız.
- Azure SQL Veritabanı veya SQL Örnek.
- Yalnızca tablolar (görünüm yok).
- Veritabanında tablo için değişiklik izlemesini etkinleştirin.
- Tabloda bileşik birincil anahtar (birden fazla sütun içeren birincil anahtar) yoktur.
Kullanım
Bu ilkeyi kullanmak için veri kaynağınızı şu şekilde oluşturun veya güncelleştirin:
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table or view name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
}
}
Tümleşik SQL izleme ilkesi kullanırken ayrı bir veri silme algılama ilkesi belirtmeyebilirsiniz. Bu ilke, silinen satırları tanımlamak için yerleşik destek içerir. Ancak silmelerin "otomatik olarak" algılandığında arama dizininizin belge anahtarı, tablodaki birincil anahtarla aynı SQL gerekir.
Not
TRUNCATE TABLE tablosundan çok sayıda satırı kaldırmak için SQL kullanırken, satır silme işlemlerini almak için değişiklik izleme durumunu sıfırlamak için dizin oluşturma işleminin sıfır olması gerekir.
Yüksek Su İşareti Değişiklik Algılama ilkesi
Bu değişiklik algılama ilkesi, bir satırın en son güncelleştirildiğinde sürümü veya saati yakalayan bir "yüksek su işareti" sütunu kullanır. Bir görünüm kullanıyorsanız, yüksek su işareti ilkesi kullansanız gerekir. Yüksek su işareti sütunu aşağıdaki gereksinimleri karşılamalıdır.
Gereksinimler
- Tüm eklemeler sütun için bir değer belirtir.
- Bir öğeye yapılan tüm güncelleştirmeler sütunun değerini de değiştirir.
- Bu sütunun değeri her ekleme veya güncelleştirme ile artar.
- Aşağıdaki WHERE ve ORDER BY yan tümceleri ile sorgular verimli bir şekilde yürütül olabilir:
WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]
Önemli
Yüksek su işareti sütunu için rowversion veri türünün kullanılması kesinlikle önerilir. Başka bir veri türü kullanılıyorsa, değişiklik izlemenin dizin oluşturma sorgusuyla eşzamanlı olarak yürütülen işlemlerin varlığında tüm değişiklikleri yakalaması garanti edilemez. Salt okunur çoğaltmalar ile bir yapılandırmada rowversion kullanırken, dizine birincil çoğaltmaya işaret gerekir. Veri eşitleme senaryoları için yalnızca birincil çoğaltma kullanılabilir.
Kullanım
Yüksek su işareti ilkesi kullanmak için veri kaynağınızı şu şekilde oluşturun veya güncelleştirin:
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table or view name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
}
}
Uyarı
Kaynak tabloda yüksek su işareti sütununda bir dizin yoksa, kaynak tablo tarafından kullanılan sorgular SQL zaman uzıyor olabilir. Özellikle yan ORDER BY [High Water Mark Column] tümcesi, tabloda çok sayıda satır olduğunda dizinin verimli bir şekilde çalışması gerekir.
convertHighWaterMarkToRowVersion
Yüksek su işareti sütunu için rowversion veri türü kullanıyorsanız dizin oluşturma yapılandırma convertHighWaterMarkToRowVersion ayarını kullanmayı göz önünde bulundurabilirsiniz. convertHighWaterMarkToRowVersion iki şey yapar:
- Indexer sql sorgusunda yüksek su işareti sütunu için rowversion veri türünü kullanın. Doğru veri türünün kullanımı dizin oluşturma sorgu performansını artırır.
- Dizin oluşturma sorgusu çalıştırmadan önce rowversion değerinden 1 çıkarma. 1'den çok birleştirmeye sahip görünümlerde yinelenen rowversion değerlerine sahip satırlar olabilir. 1 çıkararak dizin oluşturma sorgusunun bu satırları kaçırmamalarını sağlar.
Bu özelliği etkinleştirmek için dizin oluşturma veya aşağıdaki yapılandırmayla güncelleştirin:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "convertHighWaterMarkToRowVersion" : true } }
}
Querytimeout
Zaman aşımı hatalarına karşılaşırsanız, sorgu zaman aşımını varsayılan 5 dakikalık zaman aşımından daha yüksek bir değere ayarlamak için dizin oluşturma queryTimeout yapılandırma ayarını kullanabilirsiniz. Örneğin, zaman aşımını 10 dakika olarak ayarlamak için dizin oluşturma veya aşağıdaki yapılandırmayla güncelleştirin:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "queryTimeout" : "00:10:00" } }
}
disableOrderByHighWaterMarkColumn
Yan tümcesini de devre dışı ORDER BY [High Water Mark Column] 3. Ancak, dizin oluşturma işlemi bir hata nedeniyle kesiliyorsa, dizin oluşturma işlemi daha sonra çalıştırıldıklarında dizin oluşturma işlemi yarıda kesilene kadar neredeyse tüm satırları işlese bile tüm satırları yeniden işlemesi gerektir. yan ORDER BY tümcesini devre dışı bırakmak için dizin oluşturma disableOrderByHighWaterMarkColumn tanımında ayarını kullanın:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
}
Sütun SilmeYi Silme Algılama ilkesi
Satırlar kaynak tablodan silindiğinde, büyük olasılıkla bu satırları arama dizininden de silmek istiyor oluruz. Tümleşik değişiklik SQL ilkesini kullanırsanız, bu sizin için uzer. Ancak, yüksek su işareti değişiklik izleme ilkesi silinen satırlarda size yardımcı olmaz. Ne yapmalı?
Satırlar tablodan fiziksel olarak kaldırılırsa Azure Bilişsel Arama artık mevcut olmayan kayıtların varlığını çıkaramazsınız. Ancak satırları tablodan kaldırmadan mantıksal olarak silmek için "soft-delete" tekniğini kullanabilirsiniz. Tablonıza bir sütun ekleyin veya bu sütunu kullanarak satırları görüntüp silinmiş olarak işaretlerini ekleyin.
Yazılım silme tekniğini kullanırken, veri kaynağını oluştururken veya güncelleştirerek aşağıdaki gibi bir yazılım silme ilkesi belirtebilirsiniz:
{
…,
"dataDeletionDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName" : "[a column name]",
"softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
}
}
softDeleteMarkerValue bir dize olmalıdır; gerçek değerinizin dize gösterimini kullanın. Örneğin, silinen satırların 1 değeriyle işaretlenen bir tamsayı sütununu kullanıyorsanız "1" kullanın. Silinen satırların Boole true değeriyle işaretlenen bir BIT sütununu kullanıyorsanız veya dize değişmez değerini True true kullanın. Büyük/küçük harf önemli değildir.
Veri türleri SQL Azure Bilişsel Arama eşleme
| SQL veri türü | İzin verilen hedef dizin alanı türleri | Notlar |
|---|---|---|
| bit | Edm.Boolean, Edm.String | |
| int, smallint, tinyint | Edm.Int32, Edm.Int64, Edm.String | |
| bigint | Edm.Int64, Edm.String | |
| gerçek, float | Edm.Double, Edm.String | |
| small small small, money decimal numeric | Edm.String | Azure Bilişsel Arama, ondalık türlerin Edm.Double'a dönüştürülmesi desteklemez çünkü bu duyarlık kaybedilir |
| char, nchar, varchar, nvarchar | Edm.String Collection(Edm.String) |
Dize SQL bir dize JSON dizisini temsil ediyorsa Bir Collection(Edm.String) alanını doldurmak için bir dize kullanılabilir:["red", "white", "blue"] |
| smalldatetime, datetime, datetime2, date, datetimeoffset | Edm.DateTimeOffset, Edm.String | |
| uniqueidentifer | Edm.String | |
| Coğrafya | Edm.GeographyPoint | Yalnızca SRID 4326 (varsayılan) değerine sahip POINT türünde coğrafya örnekleri de desteklene |
| Rowversion | Yok | Satır sürümü sütunları arama dizininde depo kullanılamaz, ancak değişiklik izleme için kullanılabilir |
| time, timespan, binary, varbinary, image, xml, geometry, CLR types | Yok | Desteklenmez |
Yapılandırma Ayarlar
SQL diziner çeşitli yapılandırma ayarlarını gösterir:
| Ayar | Veri türü | Amaç | Varsayılan değer |
|---|---|---|---|
| Querytimeout | string | Sorgu yürütme için zaman SQL ayarlar | 5 dakika ("00:05:00") |
| disableOrderByHighWaterMarkColumn | bool | Yüksek SQL ilkesi tarafından kullanılan sorgunun ORDER BY yan tümcesini atlar. Bkz. Yüksek Su İşareti ilkesi | yanlış |
Bu ayarlar dizin oluşturma parameters.configuration tanımında nesnesinde kullanılır. Örneğin, sorgu zaman aşımını 10 dakika olarak ayarlamak için dizin oluşturma veya aşağıdaki yapılandırmayla güncelleştirin:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "queryTimeout" : "00:10:00" } }
}
SSS
S: Azure'daki IaaS VM'leri üzerinde SQL veritabanlarıyla Azure SQL dizine azure dizin oluşturma kullanabilir miyim?
Evet. Ancak arama hizmetinizin veritabanınıza bağlanmasına izin verebilirsiniz. Daha fazla bilgi için bkz. Azure VM üzerinde Azure Bilişsel Aramadizin SQL Server bağlantı yapılandırma.
S: Azure SQL dizin SQL şirket içinde çalışan veritabanlarıyla kullanabilir miyim?
Doğrudan değil. Doğrudan bağlantı önerilmez veya desteklmez, çünkü bunu yapmak için veritabanlarınızı İnternet trafiğine açmanız gerekir. Müşteriler bu senaryoyu başarılı bir şekilde kullanarak Azure Data Factory. Daha fazla bilgi için bkz. Azure Data Factory kullanarak Azure Bilişsel Arama dizine veri Azure Data Factory.
S: Azure'da IaaS'SQL çalışan SQL Server veritabanlarıyla Azure SQL Server diziner kullanabilir miyim?
Hayır. Dizin oluşturma ve test etme dışında bir veritabanıyla test etmemiz gerek olduğundan bu senaryoyu SQL Server.
S: Bir zaman çizelgesinde çalışan birden çok dizin oluşturmam gerekiyor mu?
Evet. Ancak, tek bir düğümde aynı anda yalnızca bir dizin oluşturma çalıştırıcısı çalışıyor olabilir. Birden çok dizin sağlayıcının eşzamanlı olarak çalışmasına ihtiyacınız varsa arama hizmetinizin ölçeğini birden fazla arama birimine genişletmeyi göz önünde bulundurabilirsiniz.
S: Dizin oluşturma çalıştırarak sorgu iş yükimi etkiler mi?
Evet. Dizin sağlayıcı arama hizmetinizin düğümlerinden biri üzerinde çalışır ve bu düğümün kaynakları dizin oluşturma ile sorgu trafiği ile diğer API istekleri arasında paylaşılır. Yoğun dizin oluşturma ve sorgu iş yüklerini çalıştırıyorsanız ve yüksek oranda 503 hatayla karşılaşıyorsanız veya yanıt sürelerini artırıyorsanız, arama hizmetinizin ölçeğini artırmayı göz önünde bulundurabilirsiniz.
S: Bir yük devretme kümesinde ikincil çoğaltmayı veri kaynağı olarak kullanabilir miyim?
Duruma göre değişir. Bir tablo veya görünümün tam dizinini oluşturma için ikincil bir çoğaltma kullanabilirsiniz.
Artımlı dizinleme için Azure Bilişsel Arama algılama ilkelerini destekler: SQL değişiklik izleme ve Yüksek Su İşareti.
Salt okunur çoğaltmalarda, SQL Veritabanı değişiklik izlemesini desteklemez. Bu nedenle, Yüksek Su İşareti ilkesi kullan gerekir.
Standart önerimiz, yüksek su işareti sütunu için rowversion veri türünü kullanmaktır. Ancak rowversion kullanmak, salt okunur çoğaltmalarda destek MIN_ACTIVE_ROWVERSION olmayan işlevini kullanır. Bu nedenle, rowversion kullanıyorsanız dizine dizine bir birincil çoğaltmaya işaret etmek gerekir.
Salt okunur bir çoğaltmada rowversion kullanmaya çalışırken aşağıdaki hatayı alırsınız:
"Değişiklik izleme için rowversion sütununu kullanmak ikincil (salt okunur) kullanılabilirlik çoğaltmalarda desteklenmiyor. Lütfen veri kaynaklarını güncelleştirin ve birincil kullanılabilirlik çoğaltması ile bir bağlantı belirtin. Geçerli veritabanı 'Updateability' özelliği 'READ_ONLY' şeklindedir.
S: Yüksek su işareti değişiklik izleme için alternatif, rowversion olmayan bir sütun kullanabilir miyim?
Bu önerilmez. Yalnızca rowversion, güvenilir veri eşitlemeye olanak sağlar. Ancak, aşağıdakiler uygulama mantığınıza bağlı olarak güvenli olabilir:
Dizin oluşturma işlemi çalıştırıldıklarından, dizine alınan tabloda bekleyen işlem olmadığını (örneğin, tüm tablo güncelleştirmelerinin bir zaman çizelgesinde toplu olarak olmasını ve Azure Bilişsel Arama diziner zamanlaması tablo güncelleştirme zamanlamasıyla çakışmayı önlemek için ayarlanmış olduğundan emin olun.
Belirli aralıklarla tam bir reindex ile atlı satırları alırsiniz.