Simple Search Service est une application IBM Cloud qui vous permet de créer rapidement un moteur de recherche à facettes, exposant une API que vous pouvez utiliser pour intégrer la recherche dans vos propres applications. Le service crée également un site Web qui vous permet de prévisualiser l'API et de la tester par rapport à vos propres données, ainsi que de gérer vos données via un simple CMS.
Une fois déployé, utilisez le navigateur pour télécharger des données CSV ou TSV. Spécifiez les champs à facettes et le service s’occupe du reste.
L'application utilise ces services Bluemix :
Une fois les données téléchargées, vous pouvez utiliser l'interface utilisateur pour parcourir et gérer vos données via le CMS intégré. De plus, un point de terminaison d'API compatible CORS est disponible sur <your domain name>/search
. Le point de terminaison profite de l'intégration intégrée de Cloudant pour l'indexation de texte intégral Lucene. Voici ce que vous obtenez :
?q=colour:black+AND+brand:fender
?q=black+fender+strat
?q=black+fender+strat&bookmark=<xxx>
?sort=color
ou ?sort=-color
pour décroissantVous pouvez l'utiliser avec le reste de l'API pour intégrer le service de recherche simple dans vos applications. Pour une référence complète de l'API, cliquez ici.
Bien que cette application soit une démo montrant avec quelle facilité vous pouvez créer une application sur Bluemix à l'aide de Node.js et Cloudant, elle fournit également une API de recherche mature qui évolue avec l'ajout de plusieurs nœuds Simple Search Service. En fait, une architecture similaire alimente l'expérience de recherche dans le catalogue de services Bluemix.
Une présentation plus détaillée de l’utilisation du service de recherche simple est disponible ici.
Le moyen le plus rapide de déployer cette application sur Bluemix consiste à cliquer sur le bouton Déployer sur IBM Cloud ci-dessous.
Vous n'avez pas de compte IBM Cloud ? Si vous ne l'avez pas déjà fait, vous serez invité à vous inscrire à un compte IBM Cloud lorsque vous cliquerez sur le bouton. Inscrivez-vous, vérifiez votre adresse e-mail, puis revenez ici et cliquez à nouveau sur le bouton Déployer sur IBM Cloud . Vos nouvelles informations d'identification vous permettent de déployer sur la plateforme et également de coder en ligne avec Bluemix et Git. Si vous avez des questions sur l'utilisation de Bluemix, trouvez les réponses dans IBM Cloud Docs.
Le déploiement manuel sur IBM Cloud nécessite git
et la CLI 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
Clonez ce référentiel puis exécutez npm install
pour ajouter les bibliothèques Node.js requises pour exécuter l'application.
Créez ensuite des variables d'environnement contenant votre URL Cloudant.
# Cloudant URL
export SSS_CLOUDANT_URL= ' https://<USERNAME>:<PASSWORD>@<HOSTNAME> '
remplacement des espaces réservés USERNAME
, PASSWORD
et HOSTNAME
pour les détails de votre propre compte Cloudant.
Puis exécutez :
node app.js
Le service de recherche simple utilise Etcd pour découvrir et utiliser certains de nos autres services simples afin d'étendre et d'améliorer le service.
Les autres services disponibles pour le service de recherche simple sont :
L'activation du registre de services nécessite la définition d'une variable d'environnement, ETCD_URL
. Il doit s'agir de l'URL de votre instance Etcd, y compris toutes les informations d'authentification HTTP de base
export ETCD_URL='http://username:[email protected]'
Si le registre de services est activé, tous les services découverts seront affichés sur la page Services, avec une bascule pour activer ou désactiver ces services.
Une fois activés, ces services seront automatiquement intégrés au service de recherche simple.
Si vous avez téléchargé votre contenu dans le service de recherche simple mais que vous souhaitez désormais que seul le point de terminaison /search
soit disponible publiquement, vous pouvez activer le « mode de verrouillage ».
Définissez simplement une variable d'environnement appelée LOCKDOWN
sur true
avant d'exécuter le service de recherche simple :
export LOCKDOWN=true
node app.js
ou définissez une variable d'environnement personnalisée dans Bluemix.
Lorsque le mode de verrouillage est détecté, toutes les requêtes Web recevront une réponse 401 Unauthorised
, à l'exception du point de terminaison /search
qui continuera à fonctionner. Cela empêche la modification de vos données jusqu'à ce que le mode verrouillage soit à nouveau désactivé, en supprimant la variable d'environnement.
Si vous souhaitez accéder au service de recherche simple en mode verrouillage, vous pouvez activer l'authentification HTTP de base en définissant deux variables d'environnement supplémentaires :
SSS_LOCKDOWN_USERNAME
SSS_LOCKDOWN_PASSWORD
Lorsque ceux-ci sont définis, vous pouvez contourner le mode de verrouillage en fournissant un nom d'utilisateur et un mot de passe correspondants. Si vous accédez à l'interface utilisateur, votre navigateur vous demandera ces détails. Si vous souhaitez accéder à l'API, vous pouvez fournir le nom d'utilisateur et le mot de passe dans le cadre de votre demande :
curl -X GET ' http://<yourdomain>/row/4dac2df712704b397f1b64a1c8e25033 ' --user < username > : < password >
Le service de recherche simple dispose d'une API qui vous permet de gérer vos données en dehors de l'interface utilisateur fournie. Utilisez-le pour intégrer le service SImple Search à vos applications.
La recherche est fournie par le point de terminaison GET /search
.
Recherchez sur l'un des champs indexés de votre ensemble de données à l'aide de la recherche par champs.
# Return any docs where colour=black
GET /search ? q=colour:black
La recherche sur le terrain utilise Cloudant Search.
Recherchez dans tous les champs de votre ensemble de données à l’aide de la recherche en texte libre.
# Return any docs 'black' is mentioned
GET /search ? q=black
Obtenez la page de résultats suivante en utilisant le paramètre bookmark
. Ceci est fourni dans tous les résultats du point de terminaison /search
(voir les exemples de réponses ci-dessous). Transmettez-le à la recherche suivante (avec les mêmes paramètres de requête) pour renvoyer l'ensemble de résultats suivant.
# Return the next set of docs where 'black' is mentioned
GET /search ? q=black & bookmark= < ... >
Il est possible de modifier la quantité de résultats renvoyés en utilisant le paramètre limit
.
# Return the next set of docs where 'black' is mentioned, 10 at a time
GET /search ? q=black & bookmark= < ... >& limit=10
Toutes les recherches répondront de la même manière.
{
"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
}
Une ligne spécifique peut être renvoyée en utilisant son identifiant unique, trouvé dans le champ _id
de chaque ligne. Cela se fait en utilisant le point de terminaison GET /row/:id
.
GET /row/44d2a49201625252a51d252824932580
Cela renverra la représentation JSON de cette ligne spécifique.
De nouvelles données peuvent être ajoutées ligne par ligne à l’aide du point de terminaison POST /row
.
Appelez ce point de terminaison en transmettant des paires clé/valeur qui correspondent aux champs des données existantes. Il n'y a AUCUN champ obligatoire et tous les types de champs seront appliqués. La demande échouera si des champs sont transmis qui n'existent pas déjà dans l'ensemble de données.
POST /row -d ' field_1=value_1&field_n=value_n '
Le _id
de la nouvelle ligne sera généré automatiquement et renvoyé dans le champ id
de la réponse.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 1-8a23bfa9ee2c88f2ae8dd071d2cafd56 "
}
Les données existantes peuvent être mises à jour à l’aide du point de terminaison PUT /row/:id
.
Appelez ce point de terminaison en transmettant des paires clé/valeur qui correspondent aux champs des données existantes. Vous devez également inclure le paramètre _id
dans les paires clé/valeur. Il n'y a AUCUN champ obligatoire et tous les types de champs seront appliqués. La demande échouera si des champs sont transmis qui n'existent pas déjà dans l'ensemble de données.
Remarque : Tous les champs qui ne sont pas fournis au moment d'une mise à jour seront supprimés. Même si un champ ne change pas, il faut toujours le fournir pour conserver sa valeur.
La réponse est similaire à celle de l'ajout d'une ligne, mais notez que le numéro de révision du document a augmenté.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 2-6281e0a21ed461659dba6a96d3931ccf "
}
Une ligne spécifique peut être supprimée à l'aide de son identifiant unique, trouvé dans le champ _id
de chaque ligne. Cela se fait en utilisant le point de terminaison DELETE /row/:id
.
DELETE /row/44d2a49201625252a51d252824932580
La réponse est similaire à celle de la modification d'une ligne, même si, encore une fois, notez que le numéro de révision du document a encore augmenté.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 3-37b4f5c715916bf8f90ed997d57dc437 "
}
Pour supprimer par programmation toutes les données et initialiser l'index
POST /initialize
inclure la propriété schema
dans la charge utile définissant la structure suivante
{ "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.
Valeurs valides :
name
de la propriété : n'importe quelle chaînetype
de propriété : number
, boolean
, string
, arrayofstrings
(par exemple val1,val2,val3
)example
de propriété : toute valeur valide pour ce type
facet
de propriété : true
ou false
Reportez-vous à https://github.com/IBM/metrics-collector-client-node#privacy-notice
Pour les déploiements manuels, le suivi du déploiement peut être désactivé en supprimant require("metrics-tracker-client").track();
à partir de la fin du fichier du serveur principal app.js
Copyright 2018 IBM Cloud Data Services
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « TEL QUEL », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.