Azure Cognitive Search biblioteca de clientes para Java – versão 11.5.12
Esta é a biblioteca de clientes Java para Azure Cognitive Search. Azure Cognitive Search serviço é uma solução de nuvem de pesquisa como serviço que oferece aos desenvolvedores APIs e ferramentas para adicionar uma experiência de pesquisa avançada sobre conteúdo privado e heterogêneo em aplicativos Web, móveis e empresariais.
O serviço Azure Cognitive Search é adequado para os seguintes cenários de aplicativo:
Consolide tipos de conteúdo variados em um único índice pesquisável. Para preencher um índice, você pode enviar por push documentos JSON que contenham seu conteúdo ou, se os dados já estiverem no Azure, crie um indexador para efetuar pull dos dados automaticamente.
Anexe conjuntos de habilidades a um indexador para criar conteúdo pesquisável a partir de imagens e documentos de texto grandes. Um conjunto de habilidades aproveita a IA dos Serviços Cognitivos para OCR interno, reconhecimento de entidade, extração de frases-chave, detecção de idioma, tradução de texto e análise de sentimento. Você também pode adicionar habilidades personalizadas para integrar o processamento externo do seu conteúdo durante a ingestão de dados.
Em um aplicativo cliente de pesquisa, implemente a lógica de consulta e as experiências do usuário semelhantes aos mecanismos de pesquisa da Web comerciais.
Use a biblioteca de clientes Azure Cognitive Search para:
- Envie consultas para formulários de consulta simples e avançados que incluem pesquisa difusa, pesquisa curinga, expressões regulares.
- Implemente consultas filtradas para navegação facetada, pesquisa geoespacial ou para restringir os resultados com base em critérios de filtro.
- Criar e gerenciar índices de pesquisa.
- Carregar e atualizar documentos no índice de pesquisa.
- Crie e gerencie indexadores que efetuam pull de dados do Azure para um índice.
- Crie e gerencie conjuntos de habilidades que adicionam enriquecimento de IA à ingestão de dados.
- Crie e gerencie analisadores para análise de texto avançada ou conteúdo multilíngue.
- Otimize os resultados por meio de perfis de pontuação para considerar a lógica de negócios ou a atualização.
Código-fonte | Pacote (Maven) | Documentação | de referência da APIDocumentação do produto | Amostras
Introdução
Incluir o pacote
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-search-documents</artifactId>
<version>11.5.12</version>
</dependency>
Pré-requisitos
- JDK (Java Development Kit) com a versão 8 ou superior
- Assinatura do Azure
- Serviço Azure Cognitive Search
- Para criar um novo serviço de pesquisa, você pode usar o portal do Azure, Azure PowerShell ou a CLI do Azure. Aqui está um exemplo usando a CLI do Azure para criar uma instância gratuita para começar:
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Consulte escolher um tipo de preço para obter mais informações sobre as opções disponíveis.
Autenticar o cliente
Para interagir com o serviço Azure Cognitive Search, você precisará criar uma instância da classe Pesquisar Cliente. Para tornar isso possível, você precisará,
para o serviço. A chave de api é o único mecanismo para autenticar o acesso ao ponto de extremidade de serviço de pesquisa. Você pode obter sua chave de api do portal do Azure ou por meio da CLI do Azure:
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Observação:
- O snippet de exemplo da CLI do Azure acima recupera uma chave de administrador. Isso permite um acesso mais fácil ao explorar APIs, mas deve ser gerenciado com cuidado.
- Há dois tipos de chaves usadas para acessar o serviço de pesquisa: admin(leitura-gravação) e chaves de consulta(somente leitura). Restringir o acesso e as operações em aplicativos cliente é essencial para proteger os ativos de pesquisa em seu serviço. Sempre use uma chave de consulta em vez de uma chave de administração para qualquer consulta proveniente de um aplicativo cliente.
O SDK fornece três clientes.
SearchIndexClient
para operações CRUD em índices e mapas de sinônimos.SearchIndexerClient
para operações CRUD em indexadores, fontes de data e conjuntos de habilidades.SearchClient
para todas as operações de documento.
Criar um SearchIndexClient
Para criar um SearchIndexClient/SearchIndexAsyncClient
, você precisará dos valores do ponto de extremidade da URL do serviço Azure Cognitive Search e da chave de administração.
SearchIndexClient searchIndexClient = new SearchIndexClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildClient();
ou
SearchIndexAsyncClient searchIndexAsyncClient = new SearchIndexClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildAsyncClient();
Criar um SearchIndexerClient
Para criar um SearchIndexerClient/SearchIndexerAsyncClient
, você precisará dos valores do ponto de extremidade da URL do serviço Azure Cognitive Search e da chave de administração.
SearchIndexerClient searchIndexerClient = new SearchIndexerClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildClient();
ou
SearchIndexerAsyncClient searchIndexerAsyncClient = new SearchIndexerClientBuilder()
.endpoint(endpoint)
.credential(new AzureKeyCredential(apiKey))
.buildAsyncClient();
Criar um SearchClient
Depois de ter os valores do ponto de extremidade e da chave de administração da URL do serviço Azure Cognitive Search, você poderá criar o SearchClient/SearchAsyncClient
com um nome de índice existente:
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();
Enviar sua primeira consulta de pesquisa
Para começar a executar com Azure Cognitive Search primeiro crie um índice seguindo este guia. Com um índice criado, você pode usar os exemplos a seguir para começar a usar o SDK.
Principais conceitos
Um serviço Azure Cognitive Search contém um ou mais índices que fornecem armazenamento persistente de dados pesquisáveis na forma de documentos JSON. (Se você não estiver familiarizado com a pesquisa, poderá fazer uma analogia muito aproximada entre índices e tabelas de banco de dados.) A azure-search-documents
biblioteca de clientes expõe operações nesses recursos por meio de dois tipos de cliente main.
SearchClient
ajuda com:- Pesquisando seus documentos indexados usando consultas avançadas e modelagem de dados avançada
- Preenchimento automático de termos de pesquisa parcialmente tipados com base em documentos no índice
- Sugerindo o texto correspondente mais provável em documentos como um tipo de usuário
- Adicionar, atualizar ou excluir documentos de documentos de um índice
SearchIndexClient
permite que você:- Criar, excluir, atualizar ou configurar um índice de pesquisa
- Declarar mapas de sinônimos personalizados para expandir ou reescrever consultas
- A maioria das
SearchServiceClient
funcionalidades ainda não está disponível em nossa versão prévia atual
SearchIndexerClient
permite que você:
Exemplos
Todos os exemplos a seguir usam um conjunto de dados hoteleiro simples que você pode importar para seu próprio índice do portal do Azure. Estes são apenas alguns dos conceitos básicos - por favor, marcar nossos Exemplos para muito mais.
- Consultas
- Criando um índice
- Adicionando documentos ao índice
- Recuperando um documento específico do índice
- APIs assíncronas
Consultas
Há duas maneiras de interagir com os dados retornados de uma consulta de pesquisa.
Vamos explorá-los com uma busca por um hotel de "luxo".
Usar SearchDocument
como um dicionário para resultados da pesquisa
SearchDocument
é o tipo padrão retornado de consultas quando você não fornece o seu próprio. Aqui, executamos a pesquisa, enumeramos sobre os resultados e extraímos dados usando SearchDocument
o indexador de dicionário do .
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);
}
Usar a classe de modelo Java para resultados da pesquisa
Definir um Hotel
classe.
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;
}
}
Use-o no lugar de SearchDocument
ao consultar.
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);
}
É recomendável, quando você souber o esquema do índice de pesquisa, criar uma classe de modelo Java.
Opções de pesquisa
O SearchOptions
fornece um controle poderoso sobre o comportamento de nossas consultas.
Vamos procurar os 5 melhores hotéis de luxo com uma boa classificação.
SearchOptions options = new SearchOptions()
.setFilter("rating ge 4")
.setOrderBy("rating desc")
.setTop(5);
SearchPagedIterable searchResultsIterable = searchClient.search("luxury", options, Context.NONE);
// ...
Criando um índice
Você pode usar o SearchIndexClient
para criar um índice de pesquisa. Os índices também podem definir sugestores, analisadores léxicos e muito mais.
Há várias maneiras de preparar campos de pesquisa para um índice de pesquisa. Para necessidades básicas, fornecemos um método buildSearchFields
auxiliar estático em SearchIndexClient
e SearchIndexAsyncClient
, que podem converter a classe JAVA POJO em List<SearchField>
. Há três anotações SimpleFieldProperty
SearchFieldProperty
e FieldBuilderIgnore
para configurar o campo da classe de modelo.
List<SearchField> searchFields = SearchIndexClient.buildSearchFields(Hotel.class, null);
searchIndexClient.createIndex(new SearchIndex("index", searchFields));
Para cenários avançados, podemos criar campos de pesquisa usando SearchField
diretamente.
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);
Recuperando um documento específico do índice
Além de consultar documentos usando palavras-chave e filtros opcionais, você pode recuperar um documento específico do índice se já souber a chave. Você pode obter a chave de uma consulta, por exemplo, e deseja mostrar mais informações sobre ela ou navegar pelo cliente para esse documento.
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());
Adicionando documentos ao índice
Você pode Upload
, Merge
, MergeOrUpload
e Delete
vários documentos de um índice em uma única solicitação em lote.
Há algumas regras especiais para mesclar para estar ciente.
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);
A solicitação será gerada IndexBatchException
por padrão se qualquer uma das ações individuais falhar e você puder usar findFailedActionsToRetry
para tentar novamente documentos com falha. Há também uma throwOnAnyError
opção e você pode defini-la como false
para obter uma resposta bem-sucedida com uma IndexDocumentsResult
para inspeção.
APIs assíncronas
Os exemplos até agora têm usado APIs síncronas, mas também fornecemos suporte completo para APIs assíncronas. Você precisará usar 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());
});
Autenticar em uma nuvem nacional
Para se autenticar em uma Nuvem Nacional, você precisará fazer as seguintes adições à configuração do cliente:
- Defina o
AuthorityHost
nas opções de credencial ou por meio daAZURE_AUTHORITY_HOST
variável de ambiente - Definir o
audience
emSearchClientBuilder
,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();
Solução de problemas
Geral
Quando você interage com Azure Cognitive Search usando essa biblioteca de clientes Java, os erros retornados pelo serviço correspondem aos mesmos códigos http status retornados para solicitações da API REST. Por exemplo, o serviço retornará um 404
erro se você tentar recuperar um documento que não existe no índice.
Tratamento da resposta de erro de pesquisa
Qualquer operação de API de Pesquisa que falhar lançará um HttpResponseException
com útil Status codes
. Muitos desses erros são recuperáveis.
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());
}
Também é possível habilitar registro em log do console facilmente se quiser se aprofundar nas solicitações que está fazendo ao serviço.
Habilitando o registro em log
Os SDKs do Azure para Java fornecem uma história de registro em log consistente para ajudar a solucionar problemas de erros do aplicativo e agilizar sua resolução. Os logs produzidos capturam o fluxo de um aplicativo antes que acessem o estado do terminal para ajudar a localizar o problema raiz. Exiba o wiki de log para obter diretrizes sobre como habilitar o registro em log.
Cliente HTTP padrão
Por padrão, um cliente HTTP baseado em Netty será usado. O wiki de clientes HTTP fornece mais informações sobre como configurar ou alterar o cliente HTTP.
Próximas etapas
- Os exemplos são explicados em detalhes aqui.
- Assista a uma demonstração ou vídeo de mergulho profundo
- Leia mais sobre o serviço Azure Cognitive Search
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder e de fato concede, os direitos de usar sua contribuição.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.