Introduction
Vous savez déjà que Workplace Search est fourni avec beaucoup de connecteurs qui vous permettent de connecter vos sources de données de vos documents d'entreprise et de disposer ainsi d'un moteur de recherche unifié sur toutes ces informations. Mais que faire si une source de données spécifique n'est pas encore disponible en standard ?
Cet article va couvrir comment vous pouvez créer une source de données personnalisée (custom) pour y envoyer vos propres données. Nous verrons également un exemple concret d'utilisation à travers l'usage qui en a été fait dans le projet communautaire FSCrawler.
API Custom de Workplace Search
La méthode la plus simple pour démarrer est de déployer Enterprise Search sur Elastic Cloud. Mais si vous souhaitez tout faire tourner localement, vous pouvez vous aider de cet article Enterprise Search 7.x - Docker Compose example qui fournit une approche Docker pour exécuter la suite Elastic.
Une fois que tout est démarré, ouvrez l'URL entreprise search ([URL]
), démarrez Workplace Search et ouvrez le menu Sources
. Choisissez la source Custom API
et donnez lui un nom. Par exemple, Local files
.
Une fois créé, vous pourrez récupérer le Token d'accès ([ACCESS_TOKEN]
) ainsi que la clé ([KEY]
) depuis l'écran suivant :
Tout est maintenant prêt, donc nous pouvons commencer à envoyer du contenu à indexer dans Workplace Search en utilisant l'API Custom:
curl -XPOST [URL]/api/ws/v1/sources/[KEY]/documents/bulk_create \
-H "Authorization: Bearer [ACCESS_TOKEN]" \
-H "Content-Type: application/json" \
-d '[
{
"id" : 1,
"title" : "Elasticsearch - The Definitive Guide",
"body" : "Whether you need full-text search or real-time analytics of structured data -- or both -- the Elasticsearch distributed search engine is an ideal way to put your data to work. This practical guide not only shows you how to search, analyze, and explore data with Elasticsearch, but also helps you deal with the complexities of human language, geolocation, and relationships."
}
]'
Vous devriez voir :
{"results":[{"id":"1","errors":[]}]}
Si vous regardez à nouveau la source Local files
, vous devriez voir qu'un document a été indexé..
Ce que vous pouvez vérifier en ouvrant l'application de recherche fournie en standard.
Indexez votre disque dur local
Et si nous voulions indexer notre disque dur local dans Workplace Search ? Nous devons pour cela :
- Naviguer dans les dossiers et sous dossiers pour y trouver les fichiers.
- Pour chaque fichier, en extraire les métadonnées et le contenu.
- Régulièrement, lorsque nous avons accumulé en mémoire suffisamment de contenu, envoyer celui-ci vers Workplace Search, en utilisant l'API REST Custom que nous venons juste de voir.
En 2011, j'ai démarré l'écriture d'un projet qui réalise ces deux premières étapes puis envoie le contenu vers Elasticsearch. Mais ce projet manquait d'une interface graphique utilisateur.
Avec Workplace Search disponible avec la licence basic gratuite, il devenait clair que l'interface utilisateur pour le projet FSCrawler devrait être Workplace Search.
Alors, j'ai démarré l'écriture d'une nouvelle contribution pour FSCrawler qui ajoute cette intégration avec Workplace Search.
La branche actuelle (au moment de l'écriture de cet article) ajoute :
- Un client Java pour Workplace Search, comme il n'existe pas encore de client Java officiel.
- L'intégration entre FSCrawler et ce client.
Note : il s'agit toujours d'une branche en cours de construction. Si vous souhaitez la tester, vous pouvez construire le projet vous même ou télécharger le binaire qui est lié dans la proposition de changement (PR).
Le client Java pour Workplace Search
Pour fabriquer le client Java, j'ai utilisé la librairie Jersey Client.
Si vous avez une List
de "clés, valeurs" qui représentent un document JSON, vous pouvez simplement envoyer cette liste de documents vers Workplace Search en appelant un méthode Java telle que celle-ci :
public void bulk(String host, String accessToken, String key, List<Map<String, Object>> documents) {
ClientBuilder.newClient()
.target(host + "/api/ws/v1/")
.path("sources/" + key + "/documents/bulk_create")
.request(MediaType.APPLICATION_JSON)
.header("Content-Type", "application/json")
.header("X-Swiftype-Client", "elastic-workplace-search-java")
.header("X-Swiftype-Client-Version", "7.10.0")
.header("Authorization", "Bearer " + accessToken)
.post(Entity.entity(documents, MediaType.APPLICATION_JSON), String.class);
}
Evidemment, le client que j'ai écrit peut faire un peu plus que cela au final. Il ajoute notamment des fonctionnalités avancées de bulk, mais ceci sort du cadre de cet article .
Configuration FSCrawler pour Workplace Search
Pour connecter FSCrawler avec Workplace Search, vous devez définir une configuration de job fscrawler, telle que :
name: "test"
workplace_search:
access_token: "[ACCESS_TOKEN]"
key: "[KEY]"
Cette configuration suppose que vous souhaitez indexer des documents depuis le répertoire local /tmp/es
vers une instance locale de Workplace Search connectée à une instance locale d'Elasticsearch.
Bien sûr, vous souhaitez probablement vous connectez aux instances cloud ou à un autre serveur. Pour cela, changez ainsi la configuration :
name: "test"
fs:
url: /mydocuments
elasticsearch:
username: "elastic"
password: "PASSWORD"
nodes:
- cloud_id: "CLOUD_ID"
workplace_search:
access_token: "ACCESS_TOKEN"
key: "KEY"
server: "https://XYZ.ent-search.ZONE.CLOUD_PROVIDER.elastic-cloud.com"
CLOUD_ID
et PASSWORD
sont les valeurs que vous obtenez lorsque vous déployez le cluster dans le cloud Elastic.
Démarrez FSCrawler
Lancez FSCrawler:
$ bin/fscrawler test -loop 1
,----------------------------------------------------------------------------------------------------.
| ,---,. .--.--. ,----.. ,--, 2.7-SNAPSHOT |
| ,' .' | / / '. / / \ ,--.'| |
| ,---.' || : /`. / | : : __ ,-. .---.| | : __ ,-. |
| | | .'; | |--` . | ;. /,' ,'/ /| /. ./|: : ' ,' ,'/ /| |
| : : : | : ;_ . ; /--` ' | |' | ,--.--. .-'-. ' || ' | ,---. ' | |' | |
| : | |-, \ \ `. ; | ; | | ,'/ \ /___/ \: |' | | / \ | | ,' |
| | : ;/| `----. \| : | ' : / .--. .-. | .-'.. ' ' .| | : / / |' : / |
| | | .' __ \ \ |. | '___ | | ' \__\/: . ./___/ \: '' : |__ . ' / || | ' |
| ' : ' / /`--' /' ; : .'|; : | ," .--.; |. \ ' .\ | | '.'|' ; /|; : | |
| | | | '--'. / ' | '/ :| , ; / / ,. | \ \ ' \ |; : ;' | / || , ; |
| | : \ `--'---' | : / ---' ; : .' \ \ \ |--" | , / | : | ---' |
| | | ,' \ \ .' | , .-./ \ \ | ---`-' \ \ / |
| `----' `---` `--`---' '---" `----' |
+----------------------------------------------------------------------------------------------------+
| You know, for Files! |
| Made from France with Love |
| Source: https://github.com/dadoonet/fscrawler/ |
| Documentation: https://fscrawler.readthedocs.io/ |
`----------------------------------------------------------------------------------------------------'
Et attendez un moment... Quand le programme stoppe, cela veut dire que tous les documents ont été traités et envoyés vers Workplace Search. Si quelque chose ne fonctionne pas normalement, vérifiez les fichiers journaux dans le répertoire logs
.
Si vous regardez la console d'administration de Workplace Search admin, vous devriez voir que des documents ont été ajoutés récemment.
Workplace Search défini un schéma par défaut pour les données. Vous devrez donc l'adapter et vous assurer que les dates sont en fait vues comme des champ de type date
et les nombres comme des champs de type number
. Ceci peut se faire dans la vue Schema.
Vous allez également probablement souhaiter de changer les vues par défaut depuis la page "Display Settings". Dans les captures d'écran suivantes, nous avons redéfini les vues "Search Results" et "Result Detail".
Connectez Workplace Search avec les documents d'origine
Si vous avez un serveur Web HTTP qui tourne au dessus de vos fichiers locaux, vous pourrez non seulement chercher dans ces fichiers et mettre en évidence le contenu trouvé mais également ouvrir le document d'origine depuis votre navigateur. Pour démarre un serveur web simple en utilisant Python, vous pouvez faire quelque chose comme :
cd /mydocuments
python3 -m http.server --cgi 80
Vous pouvez ensuite dire à FSCrawler d'utiliser ce serveur Web pour servir les documents en définissant la propriété workplace_search.url_prefix
. Par défaut, l'url configurée est http://127.0.0.1
. Cela sera utilisé pour lier vos résultats depuis Workplace Search avec le document binaire d'origine.
Cherchez !
Et maintenant, la puissance est à votre portée !
Si vous cherchez un document PDF qui contient par exemple le texte "words", vous n'avez qu'à écrire words pdf
dans la barre de recherche. Vous verrez alors que Workplace Search a automatiquement détecté que pdf
est en fait une extension de nom de fichier. Il montre aussi en surbrillance le texte cherché dans le contexte du document.
Si vous cliquez sur le lien hypertexte ou sur le bouton "View on Local files", cela ouvrira the document d'origine en utilisant le serveur Web local (http://127.0.0.1/test-ocr.pdf
).
En conclusion, il y a toujours moyen d'indexer votre propre source de documents dans Workplace Search et de fournir une expérience utilisateur fantastique et puissante à vos utilisateurs finaux. Juste quelques clics dans Elastic Cloud et quelques scripts ou lignes de code pour utiliser l'API disponible sur étagère.
Joyeux noël !