bibliothèque cliente Recherche cognitive Azure pour Java - version 11.5.12
Il s’agit de la bibliothèque cliente Java pour Recherche cognitive Azure. Recherche cognitive Azure service est une solution cloud de recherche en tant que service qui fournit aux développeurs des API et des outils permettant d’ajouter une expérience de recherche riche sur du contenu privé et hétérogène dans les applications web, mobiles et d’entreprise.
Le service Recherche cognitive Azure convient parfaitement aux scénarios d’application suivants :
Regroupez des types de contenu variés dans un index unique pouvant faire l’objet d’une recherche. Pour remplir un index, vous pouvez envoyer (push) des documents JSON qui contiennent votre contenu ou, si vos données se trouvent déjà dans Azure, créer un indexeur pour extraire automatiquement les données.
Joignez des ensembles de compétences à un indexeur pour créer du contenu pouvant faire l’objet d’une recherche à partir d’images et de documents texte volumineux. Un ensemble de compétences tire parti de l’IA de Cognitive Services pour l’OCR intégré, la reconnaissance d’entités, l’extraction d’expressions clés, la détection de langue, la traduction de texte et l’analyse des sentiments. Vous pouvez également ajouter des compétences personnalisées pour intégrer le traitement externe de votre contenu pendant l’ingestion de données.
Dans une application cliente de recherche, implémentez une logique de requête et des expériences utilisateur similaires aux moteurs de recherche web commerciaux.
Utilisez la bibliothèque cliente Recherche cognitive Azure pour :
- Envoyez des requêtes pour les formulaires de requête simples et avancés qui incluent la recherche approximative, la recherche générique et les expressions régulières.
- Implémentez des requêtes filtrées pour la navigation à facettes, la recherche géospatiale ou pour affiner les résultats en fonction de critères de filtre.
- Créez et gérez des index de recherche.
- Chargez et mettez à jour des documents dans l’index de recherche.
- Créez et gérez des indexeurs qui extrayent des données d’Azure dans un index.
- Créez et gérez des ensembles de compétences qui ajoutent l’enrichissement par IA à l’ingestion de données.
- Créez et gérez des analyseurs pour l’analyse de texte avancée ou le contenu multilingue.
- Optimisez les résultats grâce à des profils de scoring pour prendre en compte la logique métier ou la fraîcheur.
| Code sourcePackage (Maven) | Documentation de référence sur les| API | Documentation produitÉchantillons
Prise en main
Inclure le package
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-search-documents</artifactId>
<version>11.5.12</version>
</dependency>
Prérequis
- Kit de développement Java (JDK) avec la version 8 ou ultérieure
- Abonnement Azure
- Service Recherche cognitive Azure
- Pour créer un service de recherche, vous pouvez utiliser le Portail Azure, Azure PowerShell ou Azure CLI. Voici un exemple d’utilisation d’Azure CLI pour créer un instance gratuit pour commencer :
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Pour plus d’informations sur les options disponibles, consultez Choisir un niveau tarifaire .
Authentifier le client
Pour interagir avec le service Recherche cognitive Azure, vous devez créer un instance de la classe Search Client. Pour rendre cela possible, vous aurez besoin,
pour votre service. La clé api est le seul mécanisme d’authentification de l’accès à votre point de terminaison de service de recherche. Vous pouvez obtenir votre clé API à partir du Portail Azure ou via Azure CLI :
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Remarque :
- L’exemple d’extrait de code Azure CLI ci-dessus récupère une clé d’administration. Cela permet un accès plus facile lors de l’exploration des API, mais il doit être géré avec soin.
- Il existe deux types de clés utilisées pour accéder à votre service de recherche : les clés d’administration(lecture-écriture) et les clés de requête(lecture seule). Il est essentiel de restreindre l'accès et les opérations dans les applications clientes afin de protéger les ressources de recherche de votre service. Utilisez toujours une clé de requête plutôt qu'une clé d'administration pour toutes les requêtes provenant d'une application cliente.
Le Kit de développement logiciel (SDK) fournit trois clients.
SearchIndexClient
pour les opérations CRUD sur les index et les mappages de synonymes.SearchIndexerClient
pour les opérations CRUD sur les indexeurs, les sources de dates et les ensembles de compétences.SearchClient
pour toutes les opérations de document.
Créer un SearchIndexClient
Pour créer un SearchIndexClient/SearchIndexAsyncClient
, vous aurez besoin des valeurs du point de terminaison d’URL de service Recherche cognitive Azure et de la clé d’administration.
SearchIndexClient searchIndexClient = new SearchIndexClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildClient();
ou
SearchIndexAsyncClient searchIndexAsyncClient = new SearchIndexClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildAsyncClient();
Créer un SearchIndexerClient
Pour créer un SearchIndexerClient/SearchIndexerAsyncClient
, vous aurez besoin des valeurs du point de terminaison d’URL de service Recherche cognitive Azure et de la clé d’administration.
SearchIndexerClient searchIndexerClient = new SearchIndexerClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildClient();
ou
SearchIndexerAsyncClient searchIndexerAsyncClient = new SearchIndexerClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildAsyncClient();
Créer un SearchClient
Une fois que vous avez les valeurs du point de terminaison et de la clé d’administration de l’URL du service Recherche cognitive Azure, vous pouvez créer le SearchClient/SearchAsyncClient
avec un nom d’index existant :
SearchClient searchClient = new SearchClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(adminKey))
.indexName(indexName)
.buildClient();
ou
SearchAsyncClient searchAsyncClient = new SearchClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(adminKey))
.indexName(indexName)
.buildAsyncClient();
Envoyer votre première requête de recherche
Pour exécuter avec Recherche cognitive Azure commencez par créer un index en suivant ce guide. Avec un index créé, vous pouvez utiliser les exemples suivants pour commencer à utiliser le Kit de développement logiciel (SDK).
Concepts clés
Un service Recherche cognitive Azure contient un ou plusieurs index qui fournissent un stockage persistant des données pouvant faire l’objet d’une recherche sous forme de documents JSON. (Si vous débutez dans la recherche, vous pouvez faire une analogie très approximative entre les index et les tables de base de données.) La azure-search-documents
bibliothèque cliente expose les opérations sur ces ressources via deux types de clients main.
SearchClient
aide à :- Recherche dans vos documents indexés à l’aide de requêtes enrichies et d’une mise en forme puissante des données
- Autocompleting des termes de recherche partiellement typés en fonction des documents dans l’index
- Suggérer le texte correspondant le plus probable dans les documents en tant qu’utilisateur type
- Ajout, mise à jour ou suppression de documents à partir d’un index
SearchIndexClient
vous permet de :- Créer, supprimer, mettre à jour ou configurer un index de recherche
- Déclarer des mappages de synonymes personnalisés pour développer ou réécrire des requêtes
- La plupart des
SearchServiceClient
fonctionnalités ne sont pas encore disponibles dans notre préversion actuelle
SearchIndexerClient
vous permet de :
Exemples
Les exemples suivants utilisent tous un jeu de données Hotel simple que vous pouvez importer dans votre propre index à partir du Portail Azure. Ce ne sont que quelques-unes des bases - s’il vous plaît case activée nos exemples pour bien plus.
- Interrogation
- Création d'un index
- Ajout de documents à votre index
- Récupération d’un document spécifique à partir de votre index
- API asynchrones
Interrogation
Il existe deux façons d’interagir avec les données retournées à partir d’une requête de recherche.
Explorons-les à la recherche d’un hôtel de luxe.
Utiliser SearchDocument
comme un dictionnaire pour les résultats de recherche
SearchDocument
est le type par défaut retourné par les requêtes lorsque vous ne fournissez pas les vôtres. Ici, nous effectuons la recherche, énumérons les résultats et extrayons les données à l’aide SearchDocument
de l’indexeur de dictionnaire.
for (SearchResult searchResult : searchClient.search("luxury")) {
SearchDocument doc = searchResult.getDocument(SearchDocument.class);
String id = (String) doc.get("hotelId");
String name = (String) doc.get("hotelName");
System.out.printf("This is hotelId %s, and this is hotel name %s.%n", id, name);
}
Utiliser la classe de modèle Java pour les résultats de recherche
Définissez une classe Hotel
.
public class Hotel {
private String id;
private String name;
public String getId() {
return id;
}
public Hotel setId(String id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public Hotel setName(String name) {
this.name = name;
return this;
}
}
Utilisez-le à la place de lors de SearchDocument
l’interrogation.
for (SearchResult searchResult : searchClient.search("luxury")) {
Hotel doc = searchResult.getDocument(Hotel.class);
String id = doc.getId();
String name = doc.getName();
System.out.printf("This is hotelId %s, and this is hotel name %s.%n", id, name);
}
Il est recommandé, lorsque vous connaissez le schéma de l’index de recherche, de créer une classe de modèle Java.
Options recherche
Fournissent SearchOptions
un contrôle puissant sur le comportement de nos requêtes.
Nous allons rechercher les 5 meilleurs hôtels de luxe avec une bonne note.
SearchOptions options = new SearchOptions()
.setFilter("rating ge 4")
.setOrderBy("rating desc")
.setTop(5);
SearchPagedIterable searchResultsIterable = searchClient.search("luxury", options, Context.NONE);
// ...
Création d'un index
Vous pouvez utiliser pour SearchIndexClient
créer un index de recherche. Les index peuvent également définir des suggesteurs, des analyseurs lexicales, etc.
Il existe plusieurs façons de préparer des champs de recherche pour un index de recherche. Pour les besoins de base, nous fournissons une méthode buildSearchFields
d’assistance statique dans SearchIndexClient
et SearchIndexAsyncClient
, qui peut convertir la classe Java POJO en List<SearchField>
. Il existe trois annotations SimpleFieldProperty
et SearchFieldProperty
FieldBuilderIgnore
pour configurer le champ de la classe de modèle.
List<SearchField> searchFields = SearchIndexClient.buildSearchFields(Hotel.class, null);
searchIndexClient.createIndex(new SearchIndex("index", searchFields));
Pour les scénarios avancés, nous pouvons créer des champs de recherche directement à l’aide SearchField
de .
List<SearchField> searchFieldList = new ArrayList<>();
searchFieldList.add(new SearchField("hotelId", SearchFieldDataType.STRING)
.setKey(true)
.setFilterable(true)
.setSortable(true));
searchFieldList.add(new SearchField("hotelName", SearchFieldDataType.STRING)
.setSearchable(true)
.setFilterable(true)
.setSortable(true));
searchFieldList.add(new SearchField("description", SearchFieldDataType.STRING)
.setSearchable(true)
.setAnalyzerName(LexicalAnalyzerName.EU_LUCENE));
searchFieldList.add(new SearchField("tags", SearchFieldDataType.collection(SearchFieldDataType.STRING))
.setSearchable(true)
.setFilterable(true)
.setFacetable(true));
searchFieldList.add(new SearchField("address", SearchFieldDataType.COMPLEX)
.setFields(new SearchField("streetAddress", SearchFieldDataType.STRING).setSearchable(true),
new SearchField("city", SearchFieldDataType.STRING)
.setSearchable(true)
.setFilterable(true)
.setFacetable(true)
.setSortable(true),
new SearchField("stateProvince", SearchFieldDataType.STRING)
.setSearchable(true)
.setFilterable(true)
.setFacetable(true)
.setSortable(true),
new SearchField("country", SearchFieldDataType.STRING)
.setSearchable(true)
.setFilterable(true)
.setFacetable(true)
.setSortable(true),
new SearchField("postalCode", SearchFieldDataType.STRING)
.setSearchable(true)
.setFilterable(true)
.setFacetable(true)
.setSortable(true)
));
// Prepare suggester.
SearchSuggester suggester = new SearchSuggester("sg", Collections.singletonList("hotelName"));
// Prepare SearchIndex with index name and search fields.
SearchIndex index = new SearchIndex("hotels").setFields(searchFieldList).setSuggesters(suggester);
// Create an index
searchIndexClient.createIndex(index);
Récupération d’un document spécifique à partir de votre index
En plus d’interroger des documents à l’aide de mots clés et de filtres facultatifs, vous pouvez récupérer un document spécifique à partir de votre index si vous connaissez déjà la clé. Vous pouvez obtenir la clé à partir d’une requête, par exemple, et vouloir afficher plus d’informations à son sujet ou naviguer vers ce document.
Hotel hotel = searchClient.getDocument("1", Hotel.class);
System.out.printf("This is hotelId %s, and this is hotel name %s.%n", hotel.getId(), hotel.getName());
Ajout de documents à votre index
Vous pouvez Upload
, Merge
, MergeOrUpload
et Delete
plusieurs documents à partir d’un index dans une seule requête par lot.
Il existe quelques règles particulières à connaître pour la fusion .
IndexDocumentsBatch<Hotel> batch = new IndexDocumentsBatch<>();
batch.addUploadActions(Collections.singletonList(new Hotel().setId("783").setName("Upload Inn")));
batch.addMergeActions(Collections.singletonList(new Hotel().setId("12").setName("Renovated Ranch")));
searchClient.indexDocuments(batch);
La demande est levée IndexBatchException
par défaut si l’une des actions individuelles échoue, et vous pouvez utiliser findFailedActionsToRetry
pour réessayer sur les documents ayant échoué. Il existe également une throwOnAnyError
option, et vous pouvez la définir sur false
pour obtenir une réponse réussie avec un IndexDocumentsResult
pour inspection.
API asynchrones
Jusqu’à présent, les exemples utilisent des API synchrones, mais nous fournissons également une prise en charge complète des API asynchrones. Vous devez utiliser SearchAsyncClient.
searchAsyncClient.search("luxury")
.subscribe(result -> {
Hotel hotel = result.getDocument(Hotel.class);
System.out.printf("This is hotelId %s, and this is hotel name %s.%n", hotel.getId(), hotel.getName());
});
S’authentifier dans un cloud national
Pour vous authentifier dans un cloud national, vous devez effectuer les ajouts suivants à votre configuration client :
- Définir dans
AuthorityHost
les options d’informations d’identification ou via la variable d’environnementAZURE_AUTHORITY_HOST
- Définissez dans
audience
SearchClientBuilder
,SearchIndexClientBuilder
ouSearchIndexerClientBuilder
// Create a SearchClient that will authenticate through AAD in the China national cloud.
SearchClient searchClient = new SearchClientBuilder()
.endpoint(endpoint)
.indexName(indexName)
.credential(new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_CHINA)
.build())
.audience(SearchAudience.AZURE_CHINA)
.buildClient();
Dépannage
Général
Lorsque vous interagissez avec Recherche cognitive Azure à l’aide de cette bibliothèque cliente Java, les erreurs retournées par le service correspondent aux mêmes codes de status HTTP retournés pour les requêtes d’API REST. Par exemple, le service retourne une 404
erreur si vous essayez de récupérer un document qui n’existe pas dans votre index.
Gestion de la réponse d’erreur de recherche
Toute opération d’API de recherche qui échoue lève un HttpResponseException
avec utile Status codes
. La plupart de ces erreurs peuvent être récupérées.
try {
Iterable<SearchResult> results = searchClient.search("hotel");
} catch (HttpResponseException ex) {
// The exception contains the HTTP status code and the detailed message
// returned from the search service
HttpResponse response = ex.getResponse();
System.out.println("Status Code: " + response.getStatusCode());
System.out.println("Message: " + ex.getMessage());
}
Vous pouvez également activer la journalisation de la console facilement si vous souhaitez approfondir les requêtes que vous formulez sur le service.
Activation de la journalisation
Les kits SDK Azure pour Java fournissent un article de journalisation cohérent pour faciliter la résolution des erreurs d’application et accélérer leur résolution. Les journaux produits capturent le flux d’une application avant d’atteindre l’état terminal pour faciliter la localisation du problème racine. Consultez le wiki de journalisation pour obtenir des conseils sur l’activation de la journalisation.
Client HTTP par défaut
Par défaut, un client HTTP basé sur Netty est utilisé. Le wiki des clients HTTP fournit plus d’informations sur la configuration ou la modification du client HTTP.
Étapes suivantes
- Les exemples sont expliqués en détail ici.
- Regardez une vidéo de démonstration ou de plongée approfondie
- En savoir plus sur le service Recherche cognitive Azure
Contribution
Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) spécifiant que vous avez le droit de nous accorder les droits d’utiliser votre contribution, et que vous nous les accordez.
Quand vous envoyez une demande de tirage (pull request), un bot CLA détermine automatiquement si vous devez fournir un contrat CLA et agrémenter la demande de tirage de façon appropriée (par exemple, avec une étiquette ou un commentaire). Suivez simplement les instructions fournies par le bot. Vous ne devez effectuer cette opération qu’une seule fois sur tous les dépôts utilisant notre contrat CLA.
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.