Azure Search ve ile Veri Arama Xamarin.Forms
Azure Search, karşıya yüklenen veriler için dizin oluşturma ve sorgulama özellikleri sağlayan bir bulut hizmetidir. Bu, geleneksel olarak bir uygulamada arama işlevinin uygulanmasıyla ilişkili altyapı gereksinimlerini ve arama algoritması karmaşıklıklarını ortadan kaldırır. Bu makalede Azure Search'i bir Microsoft Azure tümleştirebilirsiniz. Xamarin.Forms
Genel Bakış
Veriler Azure Search'te dizinler ve belgeler olarak depolanır. Dizin, Azure veritabanı tarafından aranacak bir veri Arama hizmeti deposudur ve kavramsal olarak veritabanı tablosuna benzer. Belge, bir dizinde aranabilir verilerin tek bir birimidir ve kavramsal olarak veritabanı satırına benzer. Belgeleri karşıya yüklerken ve Azure Search'e arama sorguları göndererek, arama hizmetteki belirli bir dizine istekler yapılır.
Azure Search'e yapılan her istek, hizmetin adını ve API anahtarını içermeli. İki tür API anahtarı vardır:
- Yönetici anahtarları tüm işlemlere tam haklar sağlar. Bu, hizmeti yönetmeyi, dizinleri ve veri kaynaklarını oluşturmayı ve silmeyi içerir.
- Sorgu anahtarları dizinlere ve belgelere salt okunur erişim sağlar ve arama isteklerinde kullanılan uygulamalar tarafından kullanılmalıdır.
Azure Search'e yapılan en yaygın istek bir sorgu yürütmektir. Gönderebilirsiniz iki tür sorgu vardır:
- Arama sorgusu, bir dizindeki aranabilir alanların hepsinde bir veya daha fazla öğe arar. Arama sorguları basitleştirilmiş söz dizimi veya Lucene sorgu söz dizimi kullanılarak basitleştirilmiştir. Daha fazla bilgi için bkz. Azure Search'te basit sorgusöz dizimi ve Azure Search'te Lucene sorgu söz dizimi.
- Filtre sorgusu, bir boole ifadesini bir dizinde tüm filtrelenebilir alanlar üzerinde değerlendirir. Filtre sorguları, OData filtre dilinin bir alt kümesi kullanılarak inşa edilmiştir. Daha fazla bilgi için bkz. Azure Search için OData İfade söz dizimi.
Arama sorguları ve filtre sorguları ayrı ayrı veya birlikte kullanılabilir. Birlikte kullanılan filtre sorgusu önce dizinin tamamına uygulanır ve ardından arama sorgusu filtre sorgusunun sonuçları üzerinde gerçekleştirilir.
Azure Search ayrıca arama girişine göre önerilerin alınmasına da yardımcı olabilir. Daha fazla bilgi için bkz. Öneri Sorguları.
Not
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Kurulum
Azure Search'i bir uygulamayla tümleştirme Xamarin.Forms işlemi aşağıdaki gibidir:
- Azure Arama hizmeti. Daha fazla bilgi için bkz. Azure portalını Arama hizmeti Azure Portalı oluşturma.
- Silverlight'ı çözüm Taşınabilir Sınıf Xamarin.Forms Kitaplığı'dan (PCL) hedef çerçeve olarak kaldırın. Bu, PCL profilini platformlar arası geliştirmeyi destekleyen ancak Silverlight'ı desteklemeen profil 151 veya profil 92 gibi herhangi bir profille değiştirerek gerçek olabilir.
- Microsoft Azure Search Library NuGet paketini çözümde PCL projesine ekleyin.
Bu adımları gerçekleştirdikten sonra Microsoft Arama Kitaplık API'si arama dizinlerini ve veri kaynaklarını yönetmek, belgeleri karşıya yüklemek ve yönetmek ve sorguları yürütmek için kullanılabilir.
Azure Search Dizini oluşturma
Aranacak verilerin yapısıyla eş alan bir dizin şeması tanımlanmalıdır. Bu, Azure Portal'da veya sınıfını kullanarak program aracılığıyla SearchServiceClient gerçek olabilir. Bu sınıf, Azure Search bağlantılarını yönetir ve dizin oluşturmak için kullanılabilir. Aşağıdaki kod örneği, bu sınıfın bir örneğini oluşturmayı gösteriyor:
var searchClient =
new SearchServiceClient(Constants.SearchServiceName, new SearchCredentials(Constants.AdminApiKey));
Oluşturucu aşırı yüklemesi bağımsız değişken olarak bir arama hizmeti adı ve bir nesnesi alır ve nesne Azure sanal makineleri için yönetici SearchServiceClientSearchCredentials anahtarını SearchCredentials sarmalar Arama hizmeti. SearchServiceClient Dizin oluşturmak için yönetici anahtarı gereklidir.
Not
Azure SearchServiceClient Search'e çok fazla bağlantı açılmasını önlemek için bir uygulamada tek bir örnek kullanılmalıdır.
Dizin, aşağıdaki kod Index örneğinde olduğu gibi nesnesi tarafından tanımlanır:
static void CreateSearchIndex()
{
var index = new Index()
{
Name = Constants.Index,
Fields = new[]
{
new Field("id", DataType.String) { IsKey = true, IsRetrievable = true },
new Field("name", DataType.String) { IsRetrievable = true, IsFilterable = true, IsSortable = true, IsSearchable = true },
new Field("location", DataType.String) { IsRetrievable = true, IsFilterable = true, IsSortable = true, IsSearchable = true },
new Field("details", DataType.String) { IsRetrievable = true, IsFilterable = true, IsSearchable = true },
new Field("imageUrl", DataType.String) { IsRetrievable = true }
},
Suggesters = new[]
{
new Suggester("nameSuggester", SuggesterSearchMode.AnalyzingInfixMatching, new[] { "name" })
}
};
searchClient.Indexes.Create(index);
}
özelliği dizinin adına, özelliği ise bir Index.NameIndex.Fields nesne dizisine ayar Field gerekir. Her örnek bir ad, tür ve alanın nasıl kullanıl Field olduğunu belirten özellikleri belirtir. Bu özellikler şunlardır:
IsKey– alanın dizinin anahtarı olup olmadığını gösterir. Dizinde türünde yalnızca birDataType.Stringalan anahtar alanı olarak atanmalı.IsFacetable– bu alanda çok yönlü gezinti gerçekleştirmenin mümkün olup olmadığını gösterir.falsevarsayılan değerdir.IsFilterable– alanın filtre sorgularında kullanıla mı olduğunu gösterir.falsevarsayılan değerdir.IsRetrievable– alanın arama sonuçlarında alınıp alına olmadığını gösterir.truevarsayılan değerdir.IsSearchable– alanın tam metin aramalarına dahil olup olmadığını gösterir.falsevarsayılan değerdir.IsSortable– alanın ifadelerde kullanılapOrderBykullanıla olmadığını gösterir.falsevarsayılan değerdir.
Not
Bir dizini dağıtıldıktan sonra değiştirmek için verilerin yeniden oluşturması ve yeniden yüklemesi gerekir.
Bir nesne isteğe bağlı olarak, dizinde otomatik tamamlama veya arama önerisi sorgularını desteklemek için kullanılacak Index alanları tanımlayan bir özellik Suggesters belirtebilirsiniz. özelliği, Suggesters arama önerisi sonuçlarını oluşturmak için kullanılan alanları tanımlayan bir nesne Suggester dizisine ayar kullanılmalıdır.
Nesnesi Index oluşturulduktan sonra, örnekte çağrılarak Indexes.Create dizin SearchServiceClient oluşturulur.
Not
Yanıt vermesi gereken bir uygulamanın dizinini oluştururken yöntemini Indexes.CreateAsync kullanın.
Daha fazla bilgi için bkz. .NET SDK kullanarak Azure Search dizini oluşturma.
Azure Search Dizinini silme
Dizin, örnekte Indexes.Delete çağrılarak SearchServiceClient silinebilir:
searchClient.Indexes.Delete(Constants.Index);
Azure Search Dizinine Veri Yükleme
Dizin tanımlandıktan sonra veriler iki modelden biri kullanılarak bu dizine karşıya yüklenebilirsiniz:
- Çekme modeli: Veriler Azure Cosmos DB, Azure SQL Veritabanı, Azure Blob Depolama veya Azure Sanal SQL Server'da barındırılan verilerden düzenli aralıklarla alır.
- Gönderme modeli: Veriler program aracılığıyla dizine gönderilir. Bu, bu makalede benimsenen modeldir.
Dizine SearchIndexClient veri içeri aktaracak bir örnek oluşturulacak. Bu, aşağıdaki kod örneğinde SearchServiceClient.Indexes.GetClient olduğu gibi yöntemini çağırarak gerçek olabilir:
static void UploadDataToSearchIndex()
{
var indexClient = searchClient.Indexes.GetClient(Constants.Index);
var monkeyList = MonkeyData.Monkeys.Select(m => new
{
id = Guid.NewGuid().ToString(),
name = m.Name,
location = m.Location,
details = m.Details,
imageUrl = m.ImageUrl
});
var batch = IndexBatch.New(monkeyList.Select(IndexAction.Upload));
try
{
indexClient.Documents.Index(batch);
}
catch (IndexBatchException ex)
{
// Sometimes when the Search service is under load, indexing will fail for some
// documents in the batch. Compensating actions like delaying and retrying should be taken.
// Here, the failed document keys are logged.
Console.WriteLine("Failed to index some documents: {0}",
string.Join(", ", ex.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key)));
}
}
Dizine aktaracak veriler bir nesne olarak paket IndexBatch haline alınır ve bu da bir nesne koleksiyonunu IndexAction kapsüller. Her IndexAction örnek bir belge ve Azure Search'e belgede hangi eylemi gerçekleştireceklerini söyleyen bir özellik içerir. Yukarıdaki kod örneğinde eylemi belirtilmiştir. Bu eylem, belge yeni ise dizine eklenir veya zaten varsa IndexAction.Upload değiştirilir. Nesnesi IndexBatch daha sonra nesne üzerinde yöntemi çağrılarak Documents.Index dizine SearchIndexClient gönderilir. Diğer dizin oluşturma eylemleri hakkında daha fazla bilgi için bkz. Hangi dizin oluşturma eyleminin kullanımına karar verme.
Not
Tek bir dizin oluşturma isteğine yalnızca 1000 belge dahil edilebilir.
Yukarıdaki kod örneğinde, koleksiyonun monkeyList bir nesne koleksiyonundan anonim nesne olarak oluşturulmuş olduğunu Monkey unutmayın. Bu, alanı için veri oluşturur ve Pascal büyük/harf özellik adlarının büyük/büyük harf idMonkey arama dizini alan adlarına eşlemesini çözer. Alternatif olarak, bu eşleme sınıfına özniteliği ekleyerek [SerializePropertyNamesAsCamelCase] de Monkey gerçek olabilir.
Daha fazla bilgi için bkz. .NET SDK Upload Azure Search'e veri depolama.
Azure Search Dizinini Sorgulama
Bir SearchIndexClient dizini sorgulamak için bir örnek oluşturularak. Bir uygulama sorguları yürütürken, en az ayrıcalık ilkesini izlemesi ve sorgu anahtarını bağımsız değişken olarak geçerek doğrudan bir SearchIndexClientSearchIndexClient tavsiye edilebilir. Bu, kullanıcıların dizinlere ve belgelere salt okunur erişime sahip olduğunu sağlar. Bu yaklaşım aşağıdaki kod örneğinde gösterildi:
SearchIndexClient indexClient =
new SearchIndexClient(Constants.SearchServiceName, Constants.Index, new SearchCredentials(Constants.QueryApiKey));
Oluşturucu aşırı yüklemesi, bağımsız değişken olarak bir arama hizmeti adı, dizin adı ve bir nesnesi alır ve nesnesi Azure sanal makinelerinin SearchIndexClientSearchCredentials sorgu anahtarını SearchCredentials sarmalar Arama hizmeti. SearchIndexClient
Arama Sorguları
Dizin, aşağıdaki kod örneğinde Documents.SearchAsync olduğu gibi SearchIndexClient örneğinde yöntemi çağrılarak sorgu olabilir:
async Task AzureSearch(string text)
{
Monkeys.Clear();
var searchResults = await indexClient.Documents.SearchAsync<Monkey>(text);
foreach (SearchResult<Monkey> result in searchResults.Results)
{
Monkeys.Add(new Monkey
{
Name = result.Document.Name,
Location = result.Document.Location,
Details = result.Document.Details,
ImageUrl = result.Document.ImageUrl
});
}
}
yöntemi, bir arama metni bağımsız değişkeni ve sorguyu daha da SearchAsync geliştirmek için kullanılan SearchParameters isteğe bağlı bir nesnesi alır. Arama sorgusu arama metni bağımsız değişkeni olarak belirtilirken, bağımsız değişkenin özelliği ayar tarafından filtre Filter sorgusu SearchParameters belirtilebilir. Aşağıdaki kod örneği her iki sorgu türü de gösterir:
var parameters = new SearchParameters
{
Filter = "location ne 'China' and location ne 'Vietnam'"
};
var searchResults = await indexClient.Documents.SearchAsync<Monkey>(text, parameters);
Bu filtre sorgusu dizinin tamamına uygulanır ve alanın Çin'e eşit ve Vietnam'a eşit olduğu location sonuçlardan belgeleri kaldırır. Filtreleme sonrasında, arama sorgusu filtre sorgusunun sonuçlarında gerçekleştirilir.
Not
Arama yapmadan filtrelemek için arama * metni bağımsız değişkeni olarak geçişin.
yöntemi, SearchAsync sorgu sonuçlarını içeren bir nesnesi DocumentSearchResult döndürür. Bu nesne numaralandı, her nesne bir nesne olarak DocumentMonkey oluşturulacak ve for MonkeysObservableCollection display için 'ye ekleniyor. Aşağıdaki ekran görüntüleri Azure Search'den döndürülen arama sorgusu sonuçlarını gösterir:

Arama ve filtreleme hakkında daha fazla bilgi için bkz. .NET SDK kullanarak Azure Search dizininizi sorgulama.
Öneri Sorguları
Azure Search, örnekte yöntemi çağrılarak bir arama sorgusuna göre Documents.SuggestAsync önerilerde çağrılmanızı SearchIndexClient sağlar. Bu, aşağıdaki kod örneğinde gösterildi:
async Task AzureSuggestions(string text)
{
Suggestions.Clear();
var parameters = new SuggestParameters()
{
UseFuzzyMatching = true,
HighlightPreTag = "[",
HighlightPostTag = "]",
MinimumCoverage = 100,
Top = 10
};
var suggestionResults =
await indexClient.Documents.SuggestAsync<Monkey>(text, "nameSuggester", parameters);
foreach (var result in suggestionResults.Results)
{
Suggestions.Add(new Monkey
{
Name = result.Text,
Location = result.Document.Location,
Details = result.Document.Details,
ImageUrl = result.Document.ImageUrl
});
}
}
yöntemi bir arama metni bağımsız değişkeni, kullanılacak önericinin adını (dizinde tanımlanmıştır) ve sorguyu daha da geliştirmek için kullanılan isteğe bağlı SuggestAsyncSuggestParameters bir nesneyi alır. Örnek SuggestParameters aşağıdaki özellikleri ayarlar:
UseFuzzyMatching– olarak ayarlanırsa, arama metninde yerine geçen veya eksik bir karakter olsa biletrueAzure Search öneriler bulur.HighlightPreTag– önerinin ön ucu olan etiket isabetli olur.HighlightPostTag– öneriye eklenen etiket isabetli olur.MinimumCoverage– sorgunun başarılı olarak bildiriliyor olması için bir öneri sorgusunun kapsamında olması gereken dizinin yüzdesini temsil eder. Varsayılan değer 80'tir.Top– alın önerilerin sayısı. Varsayılan değeri 5 olan 1 ile 100 arasında bir tamsayı olmalıdır.
Genel etki, dizinden ilk 10 sonucun isabet vurgulama ile döndürülecek olması ve sonuçların benzer şekilde yazılmış arama terimlerini içeren belgeleri içermesidir.
yöntemi, SuggestAsync sorgu sonuçlarını içeren bir nesnesi DocumentSuggestResult döndürür. Bu nesne numaralandı, her nesne bir nesne olarak DocumentMonkey oluşturulacak ve for MonkeysObservableCollection display için 'ye ekleniyor. Aşağıdaki ekran görüntüleri Azure Search'den döndürülen öneri sonuçlarını gösterir:

Örnek uygulamada yöntemin yalnızca kullanıcı bir arama terimi girişi tamam olduğunda SuggestAsync çağrıldığında çağrıl olduğunu unutmayın. Ancak, her tuş tuşuna basarak otomatik tamamlama arama sorgularını desteklemek için de kullanılabilir.
Özet
Bu makalede Azure Search'i bir Microsoft Azure tümleştirebilirsiniz. Xamarin.Forms Azure Search, karşıya yüklenen veriler için dizin oluşturma ve sorgulama özellikleri sağlayan bir bulut hizmetidir. Bu, geleneksel olarak bir uygulamada arama işlevinin uygulanmasıyla ilişkili altyapı gereksinimlerini ve arama algoritması karmaşıklıklarını ortadan kaldırır.
Örneği indirme