Simple Search Service é um aplicativo IBM Cloud que permite criar rapidamente um mecanismo de procura facetado, expondo uma API que pode ser usada para trazer a procura para seus próprios aplicativos. O serviço também cria um site que permite visualizar a API e testá-la em seus próprios dados, bem como gerenciar seus dados por meio de um CMS simples.
Depois de implantado, use o navegador para fazer upload de dados CSV ou TSV. Especifique os campos a serem facetados e o serviço cuidará do resto.
O aplicativo usa estes serviços Bluemix:
Depois que os dados forem carregados, você poderá usar a IU para navegar e gerenciar seus dados por meio do CMS integrado. Além disso, um endpoint de API habilitado para CORS está disponível em <your domain name>/search
. O endpoint aproveita a integração integrada do Cloudant para indexação de texto completo do Lucene. Aqui está o que você ganha:
?q=colour:black+AND+brand:fender
?q=black+fender+strat
?q=black+fender+strat&bookmark=<xxx>
?sort=color
ou ?sort=-color
para decrescenteVocê pode usar isso junto com o restante da API para integrar o Simple Search Service aos seus aplicativos. Para obter uma referência completa da API, clique aqui.
Embora este aplicativo seja uma demonstração para mostrar como é fácil construir um aplicativo no Bluemix usando Node.js e Cloudant, ele também fornece uma API de pesquisa madura que é dimensionada com a adição de vários nós do Simple Search Service. Na verdade, uma arquitetura semelhante potencializa a experiência de procura no catálogo de serviços Bluemix.
Um passo a passo mais detalhado sobre como usar o Simple Search Service está disponível aqui.
A maneira mais rápida de implementar esse aplicativo no Bluemix é clicar no botão Implementar no IBM Cloud abaixo.
Não tem uma conta IBM Cloud? Se ainda não o fez, você será solicitado a se inscrever em uma conta da IBM Cloud ao clicar no botão. Cadastre-se, verifique seu endereço de e-mail, retorne aqui e clique no botão Implementar no IBM Cloud novamente. Suas novas credenciais permitem implementar na plataforma e também codificar on-line com Bluemix e Git. Se você tiver dúvidas sobre como trabalhar no Bluemix, localize as respostas no IBM Cloud Docs.
A implementação manual no IBM Cloud requer git
e a CLI do Cloud Foundry
$ git clone https://github.com/ibm-watson-data-lab/simple-search-service.git
$ cf create-service cloudantNoSQLDB Lite simple-search-service-cloudant-service
$ cd simple-search-service
$ cf push
Clone este repositório e execute npm install
para adicionar as bibliotecas Node.js necessárias para executar o aplicativo.
Em seguida, crie algumas variáveis de ambiente que contenham seu URL do Cloudant.
# Cloudant URL
export SSS_CLOUDANT_URL= ' https://<USERNAME>:<PASSWORD>@<HOSTNAME> '
substituindo os espaços reservados USERNAME
, PASSWORD
e HOSTNAME
pelos detalhes da sua própria conta Cloudant.
Então execute:
node app.js
O Simple Search Service utiliza o Etcd para descobrir e utilizar alguns de nossos outros Serviços Simples para ampliar e melhorar o serviço.
Outros serviços que estão disponíveis para o Simple Search Service são:
A ativação do Registro de Serviço requer a configuração de uma variável de ambiente, ETCD_URL
. Este deve ser o URL da sua instância do Etcd, incluindo qualquer informação básica de autenticação HTTP
export ETCD_URL='http://username:[email protected]'
Se o Registro de Serviços estiver habilitado, todos os serviços descobertos serão exibidos na página Serviços, com um botão para ativar ou desativar esses serviços.
Uma vez ativados, esses serviços serão automaticamente integrados ao Simple Search Service.
Se você carregou seu conteúdo no Simple Search Service, mas agora deseja que apenas o endpoint /search
esteja disponível publicamente, você pode ativar o "Modo de bloqueio".
Basta definir uma variável de ambiente chamada LOCKDOWN
como true
antes de executar o Simple Search Service:
export LOCKDOWN=true
node app.js
ou configure uma variável de ambiente customizada no Bluemix.
Quando o modo de bloqueio for detectado, todas as solicitações da web receberão uma resposta 401 Unauthorised
, exceto o endpoint /search
que continuará funcionando. Isso evita que seus dados sejam modificados até que o modo de bloqueio seja desativado novamente, removendo a variável de ambiente.
Se desejar obter acesso ao Simple Search Service enquanto estiver no modo de bloqueio, você pode ativar a autenticação HTTP básica definindo mais duas variáveis de ambiente:
SSS_LOCKDOWN_USERNAME
SSS_LOCKDOWN_PASSWORD
Quando estes são definidos, você pode ignorar o modo de bloqueio fornecendo um nome de usuário e uma senha correspondentes. Se você acessar a IU, seu navegador solicitará esses detalhes. Se quiser acessar a API, você pode fornecer o nome de usuário e a senha como parte de sua solicitação:
curl -X GET ' http://<yourdomain>/row/4dac2df712704b397f1b64a1c8e25033 ' --user < username > : < password >
O Simple Search Service possui uma API que permite gerenciar seus dados fora da IU fornecida. Use isso para integrar o Serviço de Pesquisa Simples aos seus aplicativos.
A pesquisa é fornecida pelo endpoint GET /search
.
Pesquise qualquer um dos campos indexados em seu conjunto de dados usando a pesquisa em campo.
# Return any docs where colour=black
GET /search ? q=colour:black
A pesquisa em campo usa o Cloudant Search.
Pesquise todos os campos do seu conjunto de dados usando a pesquisa de texto livre.
# Return any docs 'black' is mentioned
GET /search ? q=black
Obtenha a próxima página de resultados usando o parâmetro bookmark
. Isso é fornecido em todos os resultados do endpoint /search
(veja exemplos de respostas abaixo). Passe isso para a próxima pesquisa (com os mesmos parâmetros de consulta) para retornar o próximo conjunto de resultados.
# Return the next set of docs where 'black' is mentioned
GET /search ? q=black & bookmark= < ... >
É possível alterar a quantidade de resultados retornados utilizando o parâmetro limit
.
# Return the next set of docs where 'black' is mentioned, 10 at a time
GET /search ? q=black & bookmark= < ... >& limit=10
Todas as pesquisas responderão da mesma maneira.
{
"total_rows": 19, // The total number of rows in the dataset
"bookmark": "g1AAAA...JjFkA0kLVvg", // bookmark, for pagination
"rows": [ // the rows returned in this response
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... }
],
"counts": { // counts of the fields which were selected as facets during import
"type": {
"Black": 19
}
},
"_ts": 1467108849821
}
Uma linha específica pode ser retornada usando seu ID exclusivo, encontrado no campo _id
de cada linha. Isso é feito usando o endpoint GET /row/:id
.
GET /row/44d2a49201625252a51d252824932580
Isto retornará a representação JSON desta linha específica.
Novos dados podem ser adicionados uma linha por vez usando o endpoint POST /row
.
Chame esse endpoint passando pares chave/valor que correspondam aos campos nos dados existentes. NÃO há campos obrigatórios e todos os tipos de campo serão aplicados. A solicitação falhará se forem passados quaisquer campos que ainda não existam no conjunto de dados.
POST /row -d ' field_1=value_1&field_n=value_n '
O _id
da nova linha será gerado automaticamente e retornado no campo id
da resposta.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 1-8a23bfa9ee2c88f2ae8dd071d2cafd56 "
}
Os dados de saída podem ser atualizados usando o endpoint PUT /row/:id
.
Chame esse endpoint passando pares chave/valor que correspondam aos campos nos dados existentes - você também deve incluir o parâmetro _id
nos pares chave/valor. NÃO há campos obrigatórios e todos os tipos de campo serão aplicados. A solicitação falhará se forem passados quaisquer campos que ainda não existam no conjunto de dados.
Nota: Todos os campos que não forem fornecidos no momento de uma atualização serão removidos. Mesmo que um campo não esteja mudando, ele deve sempre ser fornecido para preservar seu valor.
A resposta é semelhante à adição de uma linha, embora observe que o número de revisão do documento aumentou.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 2-6281e0a21ed461659dba6a96d3931ccf "
}
Uma linha específica pode ser excluída usando seu ID exclusivo, encontrado no campo _id
de cada linha. Isso é feito usando o endpoint DELETE /row/:id
.
DELETE /row/44d2a49201625252a51d252824932580
A resposta é semelhante à da edição de uma linha, embora note novamente que o número de revisão do documento aumentou mais uma vez.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 3-37b4f5c715916bf8f90ed997d57dc437 "
}
Para excluir programaticamente todos os dados e inicializar o índice
POST /initialize
incluindo a propriedade schema
na carga útil que define a seguinte estrutura
{ "fields": [
{
"name": "id",
"type": "string",
"example": "example_id",
"facet": true
},
{
"name": "score",
"type": "number",
"example": 8,
"facet": false
},
{
"name": "tags",
"type": "arrayofstrings",
"example": "example_tag_1,example_tag_2",
"facet": true
}
]
}
> This example defines a schema containing three fields of which two will be enabled for faceted search.
Valores válidos:
name
da propriedade: qualquer stringtype
propriedade: number
, boolean
, string
, arrayofstrings
(por exemplo, val1,val2,val3
)example
de propriedade: qualquer valor válido para este type
facet
da propriedade: true
ou false
Consulte https://github.com/IBM/metrics-collector-client-node#privacy-notice
Para implantações manuais, o rastreamento de implantação pode ser desativado removendo require("metrics-tracker-client").track();
do final do arquivo do servidor principal app.js
Direitos Autorais 2018 IBM Cloud Data Services
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.