Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł to szybki start języka C# dla starszej biblioteki klienta Microsoft.Azure.Search (wersja 10), zastąpionej przez bibliotekę klienta Azure.Search.Documents (wersja 11).
Uwaga / Notatka
Jeśli masz istniejące lub wlotowe projekty programistyczne, możesz nadal używać wersji 10. Jednak w przypadku nowych projektów lub używania nowych funkcji należy przejść do nowej biblioteki.
Informacje o tym przewodniku Szybki start
Utwórz aplikację konsolową platformy .NET Core w języku C#, która tworzy, ładuje i wykonuje zapytania względem indeksu usługi Azure Cognitive Search przy użyciu programu Visual Studio i bibliotek klienckich Microsoft.Azure.Search.
W tym artykule wyjaśniono, jak utworzyć aplikację. Możesz również pobrać i uruchomić pełną aplikację.
Uwaga / Notatka
Kod demonstracyjny w tym artykule używa synchronicznych metod zestawu .NET SDK usługi Azure Cognitive Search w wersji 10 dla uproszczenia. Jednak w przypadku scenariuszy produkcyjnych zalecamy użycie metod asynchronicznych we własnych aplikacjach, aby zapewnić ich skalowalność i szybkość reakcji. Można na przykład użyć poleceń CreateAsync i DeleteAsync zamiast Create i Delete.
Wymagania wstępne
Przed rozpoczęciem musisz mieć następujące elementy:
Konto Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
Usługa Azure Cognitive Search. Utwórz usługę lub znajdź istniejącą usługę w ramach bieżącej subskrypcji. Możesz skorzystać z bezpłatnej usługi dla tego szybkiego startu.
Visual Studio, dowolna wersja. Przykładowy kod i instrukcje zostały przetestowane w bezpłatnej wersji Community.
Uzyskiwanie klucza i adresu URL
Każde wywołanie usługi wymaga punktu końcowego URL oraz klucza dostępu. Usługa wyszukiwania jest tworzona przy użyciu obu tych elementów, więc jeśli usługa Azure Cognitive Search została dodana do subskrypcji, wykonaj następujące kroki, aby uzyskać niezbędne informacje:
Zaloguj się do witryny Azure Portal i na stronie Przegląd usługi wyszukiwania uzyskaj adres URL. Przykładowy punkt końcowy może wyglądać podobnie jak
https://mydemo.search.windows.net.W ustawieniach>Klucze uzyskaj klucz administratora, aby mieć pełne prawa do usługi. Istnieją dwa wymienne klucze administratora, które zapewniają ciągłość działania na wypadek konieczności zastąpienia jednego z nich. Możesz użyć klucza podstawowego lub pomocniczego na żądaniach dodawania, modyfikowania i usuwania obiektów.
Pobierz również klucz zapytania. Najlepszym rozwiązaniem jest wystawianie żądań zapytań przy użyciu dostępu tylko do odczytu.
Wszystkie żądania wymagają klucza API na każdym żądaniu wysyłanym do Twojej usługi. Posiadanie prawidłowego klucza ustanawia relację zaufania dla poszczególnych żądań między aplikacją wysyłającą żądanie a usługą, która go obsługuje.
Konfigurowanie środowiska
Zacznij od otwarcia programu Visual Studio i utworzenia nowego projektu aplikacji konsolowej, który można uruchomić na platformie .NET Core.
Instalowanie pakietów NuGet
Pakiet Microsoft.Azure.Search składa się z kilku bibliotek klienckich, które są dystrybuowane jako pakiety NuGet.
W tym projekcie użyj wersji 10 Microsoft.Azure.Search pakietu NuGet i najnowszego Microsoft.Extensions.Configuration.Json pakietu NuGet.
W Narzędzia>Menedżer pakietów NuGet wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania...
Kliknij Przeglądaj.
Wyszukaj
Microsoft.Azure.Searchi wybierz wersję 10.Kliknij pozycję Zainstaluj po prawej stronie, aby dodać zestaw do projektu i rozwiązania.
Powtórz dla
Microsoft.Extensions.Configuration.Json, wybierając wersję 2.2.0 lub nowszą.
Dodawanie informacji o usłudze Azure Cognitive Search
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz polecenie Dodaj>nowy element... .
W obszarze Dodaj nowy element wyszukaj ciąg "JSON", aby zwrócić listę typów elementów powiązanych z formatem JSON.
Wybierz Plik JSON, nadaj plikowi nazwę "appsettings.json", a następnie kliknij Dodaj.
Dodaj plik do katalogu wyjściowego. Kliknij prawym przyciskiem myszy appsettings.json i wybierz polecenie Właściwości. W opcji Kopiuj do katalogu wyjściowego wybierz Kopiuj, jeśli jest nowsza.
Skopiuj następujący kod JSON do nowego pliku JSON.
{ "SearchServiceName": "<YOUR-SEARCH-SERVICE-NAME>", "SearchServiceAdminApiKey": "<YOUR-ADMIN-API-KEY>", "SearchIndexName": "hotels-quickstart" }Zastąp nazwę usługi wyszukiwania (YOUR-SEARCH-SERVICE-NAME) i klucz interfejsu API administratora (YOUR-ADMIN-API-KEY) prawidłowymi wartościami. Jeśli punkt końcowy usługi to
https://mydemo.search.windows.net, nazwa usługi to "mydemo".
Dodaj pliki ".Method" do swojego projektu
Ten krok jest wymagany do utworzenia znaczących danych wyjściowych w konsoli. Podczas drukowania wyników w oknie konsoli poszczególne pola z obiektu Hotel muszą być zwracane jako ciągi. Ten krok implementuje funkcję ToString() w celu wykonania tego zadania, które należy wykonać przez skopiowanie niezbędnego kodu do dwóch nowych plików.
Dodaj dwie puste definicje klas do projektu: Address.Methods.cs, Hotel.Methods.cs
W Address.Methods.cs zastąp domyślną zawartość następującym kodem, wiersze 1–25.
W Hotel.Methods.cs skopiuj wiersze 1–68.
1 — Tworzenie indeksu
Indeks hoteli składa się z prostych i złożonych pól, gdzie proste pole to "NazwaHotelu" lub "Opis", a pola złożone to adres z polami dodatkowymi lub zbiór pokoi. Gdy indeks zawiera typy złożone, izoluj złożone definicje pól w oddzielnych klasach.
Dodaj dwie puste definicje klas do projektu: Address.cs, Hotel.cs
W Address.cs zastąp domyślną zawartość następującym kodem:
using System; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Newtonsoft.Json; namespace AzureSearchQuickstart { public partial class Address { [IsSearchable] public string StreetAddress { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string City { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string StateProvince { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string PostalCode { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string Country { get; set; } } }W Hotel.cs klasa definiuje ogólną strukturę indeksu, w tym odwołania do klasy adresowej.
namespace AzureSearchQuickstart { using System; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Newtonsoft.Json; public partial class Hotel { [System.ComponentModel.DataAnnotations.Key] [IsFilterable] public string HotelId { get; set; } [IsSearchable, IsSortable] public string HotelName { get; set; } [IsSearchable] [Analyzer(AnalyzerName.AsString.EnMicrosoft)] public string Description { get; set; } [IsSearchable] [Analyzer(AnalyzerName.AsString.FrLucene)] [JsonProperty("Description_fr")] public string DescriptionFr { get; set; } [IsSearchable, IsFilterable, IsSortable, IsFacetable] public string Category { get; set; } [IsSearchable, IsFilterable, IsFacetable] public string[] Tags { get; set; } [IsFilterable, IsSortable, IsFacetable] public bool? ParkingIncluded { get; set; } [IsFilterable, IsSortable, IsFacetable] public DateTimeOffset? LastRenovationDate { get; set; } [IsFilterable, IsSortable, IsFacetable] public double? Rating { get; set; } public Address Address { get; set; } } }Atrybuty w polu określają sposób jej użycia w aplikacji. Na przykład
IsSearchableatrybut musi być przypisany do każdego pola, które powinno zostać uwzględnione w wyszukiwaniu pełnotekstowym.Uwaga / Notatka
W zestawie SDK platformy .NET pola muszą być jawnie przypisywane jako
IsSearchable,IsFilterable,IsSortableiIsFacetable. To zachowanie jest sprzeczne z interfejsem API REST, który niejawnie umożliwia przypisanie na podstawie typu danych (na przykład proste pola ciągów są automatycznie przeszukiwalne).Dokładnie jedno pole w indeksie typu
stringmusi być polem klucza , jednoznacznie identyfikując każdy dokument. W tym schemacie kluczem jestHotelId.W tym indeksie pola opisu używają opcjonalnej właściwości
analyzer, którą określa się, jeśli chcesz zastąpić domyślny standardowy analizator Lucene. Poledescription_frużywa francuskiego analizatora Lucene (FrLucene), ponieważ przechowuje tekst francuski. Narzędziedescriptionkorzysta z opcjonalnego analizatora języka firmy Microsoft (EnMicrosoft).W Program.cs utwórz wystąpienie
SearchServiceClientklasy w celu nawiązania połączenia z usługą przy użyciu wartości przechowywanych w pliku konfiguracji aplikacji (appsettings.json).SearchServiceClientIndexesma właściwość udostępniającą wszystkie metody potrzebne do utworzenia, wyświetlenia, zaktualizowania lub usunięcia indeksów usługi Azure Cognitive Search.using System; using System.Linq; using System.Threading; using Microsoft.Azure.Search; using Microsoft.Azure.Search.Models; using Microsoft.Extensions.Configuration; namespace AzureSearchQuickstart { class Program { // Demonstrates index delete, create, load, and query // Commented-out code is uncommented in later steps static void Main(string[] args) { IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); IConfigurationRoot configuration = builder.Build(); SearchServiceClient serviceClient = CreateSearchServiceClient(configuration); string indexName = configuration["SearchIndexName"]; Console.WriteLine("{0}", "Deleting index...\n"); DeleteIndexIfExists(indexName, serviceClient); Console.WriteLine("{0}", "Creating index...\n"); CreateIndex(indexName, serviceClient); // Uncomment next 3 lines in "2 - Load documents" // ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName); // Console.WriteLine("{0}", "Uploading documents...\n"); // UploadDocuments(indexClient); // Uncomment next 2 lines in "3 - Search an index" // Console.WriteLine("{0}", "Searching index...\n"); // RunQueries(indexClient); Console.WriteLine("{0}", "Complete. Press any key to end application...\n"); Console.ReadKey(); } // Create the search service client private static SearchServiceClient CreateSearchServiceClient(IConfigurationRoot configuration) { string searchServiceName = configuration["SearchServiceName"]; string adminApiKey = configuration["SearchServiceAdminApiKey"]; SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(adminApiKey)); return serviceClient; } // Delete an existing index to reuse its name private static void DeleteIndexIfExists(string indexName, SearchServiceClient serviceClient) { if (serviceClient.Indexes.Exists(indexName)) { serviceClient.Indexes.Delete(indexName); } } // Create an index whose fields correspond to the properties of the Hotel class. // The Address property of Hotel will be modeled as a complex field. // The properties of the Address class in turn correspond to sub-fields of the Address complex field. // The fields of the index are defined by calling the FieldBuilder.BuildForType() method. private static void CreateIndex(string indexName, SearchServiceClient serviceClient) { var definition = new Microsoft.Azure.Search.Models.Index() { Name = indexName, Fields = FieldBuilder.BuildForType<Hotel>() }; serviceClient.Indexes.Create(definition); } } }Jeśli to możliwe, użyj pojedynczego wystąpienia
SearchServiceClientw Twojej aplikacji, aby uniknąć otwierania zbyt wielu połączeń. Metody klas są bezpieczne wątkowo, aby umożliwić takie udostępnianie.Klasa ma kilka konstruktorów. Żądany obiekt przyjmuje nazwę usługi wyszukiwania i
SearchCredentialsobiekt jako parametry.SearchCredentialsobejmuje twój klucz API.W definicji indeksu najprostszym sposobem utworzenia
Fieldobiektów jest wywołanieFieldBuilder.BuildForTypemetody , przekazując klasę modelu dla parametru typu. Klasa modelu ma właściwości, które mapują pola indeksu. To mapowanie umożliwia powiązanie dokumentów z indeksu wyszukiwania z wystąpieniami klasy modelu.Uwaga / Notatka
Jeśli nie planujesz używania klasy modelu, nadal możesz zdefiniować indeks, tworząc
Fieldobiekty bezpośrednio. Możesz podać nazwę pola konstruktorowi wraz z typem danych (lub analizatorem dla pól ciągów). Możesz również ustawić inne właściwości, takie jakIsSearchable,IsFilterable, aby wymienić kilka.Naciśnij F5, aby skompilować aplikację i utworzyć indeks.
Jeśli projekt zostanie zbudowany pomyślnie, otworzy się okno konsoli, na ekranie którego pojawią się komunikaty o stanie dotyczące usuwania i tworzenia indeksu.
2 — Ładowanie dokumentów
W usłudze Azure Cognitive Search dokumenty to struktury danych, które są danymi wejściowymi do indeksowania i danych wyjściowych z zapytań. Dane wejściowe dokumentu uzyskane z zewnętrznego źródła danych mogą być wierszami w bazie danych, obiektami blob w usłudze Blob Storage lub dokumentami JSON na dysku. W tym przykładzie używamy skrótu i osadzamy dokumenty JSON dla czterech hoteli w samym kodzie.
Podczas przekazywania dokumentów należy użyć IndexBatch obiektu. Element IndexBatch zawiera kolekcję IndexAction obiektów, z których każda zawiera dokument i właściwość informującą usługę Azure Cognitive Search o tym, jaką akcję należy wykonać (przekazywanie, scalanie, usuwanie i scalanieOrUpload).
W Program.cs utwórz tablicę dokumentów i akcji indeksu, a następnie przekaż tablicę do
IndexBatch. Poniższe dokumenty są zgodne z indeksem hotel-quickstart zdefiniowanym przez klasy hotelowe i adresowe.// Upload documents as a batch private static void UploadDocuments(ISearchIndexClient indexClient) { var actions = new IndexAction<Hotel>[] { IndexAction.Upload( new Hotel() { HotelId = "1", HotelName = "Secret Point Motel", Description = "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", DescriptionFr = "L'hôtel est idéalement situé sur la principale artère commerciale de la ville en plein cœur de New York. A quelques minutes se trouve la place du temps et le centre historique de la ville, ainsi que d'autres lieux d'intérêt qui font de New York l'une des villes les plus attractives et cosmopolites de l'Amérique.", Category = "Boutique", Tags = new[] { "pool", "air conditioning", "concierge" }, ParkingIncluded = false, LastRenovationDate = new DateTimeOffset(1970, 1, 18, 0, 0, 0, TimeSpan.Zero), Rating = 3.6, Address = new Address() { StreetAddress = "677 5th Ave", City = "New York", StateProvince = "NY", PostalCode = "10022", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "2", HotelName = "Twin Dome Motel", Description = "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.", DescriptionFr = "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.", Category = "Boutique", Tags = new[] { "pool", "free wifi", "concierge" }, ParkingIncluded = false, LastRenovationDate = new DateTimeOffset(1979, 2, 18, 0, 0, 0, TimeSpan.Zero), Rating = 3.60, Address = new Address() { StreetAddress = "140 University Town Center Dr", City = "Sarasota", StateProvince = "FL", PostalCode = "34243", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "3", HotelName = "Triple Landscape Hotel", Description = "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.", DescriptionFr = "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.", Category = "Resort and Spa", Tags = new[] { "air conditioning", "bar", "continental breakfast" }, ParkingIncluded = true, LastRenovationDate = new DateTimeOffset(2015, 9, 20, 0, 0, 0, TimeSpan.Zero), Rating = 4.80, Address = new Address() { StreetAddress = "3393 Peachtree Rd", City = "Atlanta", StateProvince = "GA", PostalCode = "30326", Country = "USA" } } ), IndexAction.Upload( new Hotel() { HotelId = "4", HotelName = "Sublime Cliff Hotel", Description = "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.", DescriptionFr = "Le sublime Cliff Hotel est situé au coeur du centre historique de sublime dans un quartier extrêmement animé et vivant, à courte distance de marche des sites et monuments de la ville et est entouré par l'extraordinaire beauté des églises, des bâtiments, des commerces et Monuments. Sublime Cliff fait partie d'un Palace 1800 restauré avec amour.", Category = "Boutique", Tags = new[] { "concierge", "view", "24-hour front desk service" }, ParkingIncluded = true, LastRenovationDate = new DateTimeOffset(1960, 2, 06, 0, 0, 0, TimeSpan.Zero), Rating = 4.6, Address = new Address() { StreetAddress = "7400 San Pedro Ave", City = "San Antonio", StateProvince = "TX", PostalCode = "78216", Country = "USA" } } ), }; var batch = IndexBatch.New(actions); try { indexClient.Documents.Index(batch); } catch (IndexBatchException e) { // When a service is under load, indexing might fail for some documents in the batch. // Depending on your application, you can compensate by delaying and retrying. // For this simple demo, we just log the failed document keys and continue. Console.WriteLine( "Failed to index some of the documents: {0}", String.Join(", ", e.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key))); } // Wait 2 seconds before starting queries Console.WriteLine("Waiting for indexing...\n"); Thread.Sleep(2000); }Po zainicjowaniu obiektu
IndexBatch, można go wysłać do indeksu, wywołując metodęDocuments.Indexna swoim obiekcieSearchIndexClient.Documentsto właściwośćSearchIndexClient, która udostępnia metody dodawania, modyfikowania, usuwania lub wykonywania zapytań dotyczących dokumentów w indeksie.Otoczenie wokół wywołania metody
Indexprzechwytuje błędy indeksowania, które mogą wystąpić, jeśli usługa jest pod dużym obciążeniem. W kodzie produkcyjnym można opóźnić, a następnie ponowić indeksowanie dokumentów, które zakończyły się niepowodzeniem, lub zarejestrować i kontynuować, podobnie jak w przykładzie, lub obsłużyć je w inny sposób, który spełnia wymagania dotyczące spójności danych aplikacji.2-sekundowe opóźnienie rekompensuje indeksowanie, co jest asynchroniczne, dzięki czemu wszystkie dokumenty można indeksować przed wykonaniem zapytań. Kodowanie w opóźnieniu jest zwykle konieczne tylko w przypadku pokazów, testów i przykładowych aplikacji.
W Program.cs w funkcji main odkomentuj linie dla "2 — Załaduj dokumenty".
// Uncomment next 3 lines in "2 - Load documents" ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName); Console.WriteLine("{0}", "Uploading documents...\n"); UploadDocuments(indexClient);Naciśnij F5, aby ponownie skompilować aplikację.
Jeśli projekt zostanie pomyślnie skompilowany, otworzy się okno konsoli, wyświetlając komunikaty o stanie, tym razem z informacją o przesyłaniu dokumentów. W witrynie Azure Portal na stronie Przegląd usługi wyszukiwania indeks hotels-quickstart powinien teraz zawierać 4 dokumenty.
Aby uzyskać więcej informacji na temat przetwarzania dokumentów, zobacz "Jak zestaw SDK platformy .NET obsługuje dokumenty".
3 — Wyszukiwanie indeksu
Wyniki zapytania można uzyskać zaraz po indeksowanym pierwszym dokumencie, ale rzeczywiste testowanie indeksu powinno poczekać, aż wszystkie dokumenty zostaną zindeksowane.
W tej sekcji dodano dwie funkcje: logikę zapytań i wyniki. W przypadku zapytań użyj Search metody . Ta metoda przyjmuje tekst wyszukiwania, a także inne parametry.
Klasa DocumentsSearchResult reprezentuje wyniki.
W Program.cs utwórz metodę WriteDocuments, która wyświetla wyniki wyszukiwania w konsoli.
private static void WriteDocuments(DocumentSearchResult<Hotel> searchResults) { foreach (SearchResult<Hotel> result in searchResults.Results) { Console.WriteLine(result.Document); } Console.WriteLine(); }Utwórz metodę RunQueries, aby wykonywać zapytania i zwracać wyniki. Wyniki to obiekty hotelowe. Możesz użyć parametru select, aby wyświetlić poszczególne pola. Jeśli pole nie zostanie uwzględnione w parametrze select, odpowiadająca mu właściwość Hotel będzie mieć wartość null.
private static void RunQueries(ISearchIndexClient indexClient) { SearchParameters parameters; DocumentSearchResult<Hotel> results; // Query 1 Console.WriteLine("Query 1: Search for term 'Atlanta' with no result trimming"); parameters = new SearchParameters(); results = indexClient.Documents.Search<Hotel>("Atlanta", parameters); WriteDocuments(results); // Query 2 Console.WriteLine("Query 2: Search on the term 'Atlanta', with trimming"); Console.WriteLine("Returning only these fields: HotelName, Tags, Address:\n"); parameters = new SearchParameters() { Select = new[] { "HotelName", "Tags", "Address" }, }; results = indexClient.Documents.Search<Hotel>("Atlanta", parameters); WriteDocuments(results); // Query 3 Console.WriteLine("Query 3: Search for the terms 'restaurant' and 'wifi'"); Console.WriteLine("Return only these fields: HotelName, Description, and Tags:\n"); parameters = new SearchParameters() { Select = new[] { "HotelName", "Description", "Tags" } }; results = indexClient.Documents.Search<Hotel>("restaurant, wifi", parameters); WriteDocuments(results); // Query 4 -filtered query Console.WriteLine("Query 4: Filter on ratings greater than 4"); Console.WriteLine("Returning only these fields: HotelName, Rating:\n"); parameters = new SearchParameters() { Filter = "Rating gt 4", Select = new[] { "HotelName", "Rating" } }; results = indexClient.Documents.Search<Hotel>("*", parameters); WriteDocuments(results); // Query 5 - top 2 results Console.WriteLine("Query 5: Search on term 'boutique'"); Console.WriteLine("Sort by rating in descending order, taking the top two results"); Console.WriteLine("Returning only these fields: HotelId, HotelName, Category, Rating:\n"); parameters = new SearchParameters() { OrderBy = new[] { "Rating desc" }, Select = new[] { "HotelId", "HotelName", "Category", "Rating" }, Top = 2 }; results = indexClient.Documents.Search<Hotel>("boutique", parameters); WriteDocuments(results); }Istnieją dwa sposoby dopasowywania terminów w zapytaniu: wyszukiwanie pełnotekstowe i filtry. Zapytanie wyszukiwania pełnotekstowego wyszukuje co najmniej jeden termin w
IsSearchablepolach w indeksie. Filtr to wyrażenie logiczne, które jest oceniane względemIsFilterablepól w indeksie. Wyszukiwanie pełnotekstowe i filtry można używać razem lub oddzielnie.Zarówno wyszukiwania, jak i filtry są wykonywane przy użyciu
Documents.Searchmetody . Zapytanie wyszukiwania można przekazać w parametrzesearchText, podczas gdy wyrażenie filtru może zostać przekazane weFilterwłaściwościSearchParametersklasy. Aby filtrować bez wyszukiwania, wystarczy przekazać"*"dla parametrusearchText. Aby wyszukać bez filtrowania, po prostu pozostaw właściwośćFilternieustawioną lub w ogóle nie przekazuj wystąpieniaSearchParameters.W Program.cs, w metodzie main, odkomentuj linie dla „3 - Wyszukiwanie”.
// Uncomment next 2 lines in "3 - Search an index" Console.WriteLine("{0}", "Searching documents...\n"); RunQueries(indexClient);Rozwiązanie zostało zakończone. Naciśnij F5, aby ponownie skompilować aplikację i uruchomić program w całości.
Dane wyjściowe zawierają te same komunikaty, co poprzednio, z dodatkami do informacji o zapytaniach i wynikach.
Uprzątnij zasoby
Jeśli pracujesz w ramach własnej subskrypcji, dobrym pomysłem po zakończeniu projektu jest sprawdzenie, czy dalej potrzebujesz utworzonych zasobów. Zasoby pozostawione w stanie aktywnym mogą generować koszty. Zasoby można usunąć pojedynczo lub usunąć grupę zasobów, aby usunąć cały zestaw zasobów.
Można znaleźć i zarządzać zasobami w portalu, korzystając z linku Wszystkie zasoby lub grupy zasobów w panelu nawigacyjnym po lewej stronie.
Jeśli używasz bezpłatnej usługi, pamiętaj, że masz ograniczenie do trzech indeksów, indeksatorów i źródeł danych. Możesz usunąć poszczególne elementy w portalu, aby pozostać w limicie.
Dalsze kroki
W tym szybkim starcie C# wykonałeś szereg zadań, aby utworzyć indeks, załadować go dokumentami i uruchomić zapytania. Na różnych etapach zajęliśmy skróty, aby uprościć kod pod kątem czytelności i zrozumienia. Jeśli znasz podstawowe pojęcia, zalecamy kolejny artykuł dotyczący eksploracji alternatywnych podejść i pojęć, które pogłębią Twoją wiedzę.
Przykładowy kod i indeks są rozszerzonymi wersjami tego kodu. Następny przykład dodaje kolekcję Rooms, używa różnych klas i akcji i przyjrzy się bliżej sposobom przetwarzania.
Chcesz zoptymalizować i zaoszczędzić na wydatkach na chmurę?