Savoir comment collecter, analyser, enrichir et indexer des données dans Elasticsearch est important, mais savoir comment poser des questions précises sur les données est encore plus crucial. Après tout, vous ne pouvez pas épeler “Elasticsearch” sans “recherche” ! Que vous utilisiez Elasticsearch pour la recherche de sites, la recherche de produits, l’analyse opérationnelle ou la veille stratégique, savoir formuler des requêtes de recherche complexes est essentiel pour tirer de la valeur de toutes ces données que vous avez réussi à collecter, analyser, enrichir et indexer. Dans ce laboratoire pratique, vous allez effectuer les tâches suivantes :
Vous travaillez en tant que consultant Elasticsearch et avez été engagé par une université locale qui cherche à mettre en œuvre Elasticsearch pour la recherche littéraire. L’équipe avec laquelle vous travaillez crée une interface utilisateur qui permettra aux étudiants d’effectuer des analyses de recherche sur diverses œuvres littéraires. La configuration de test avec laquelle vous travaillez est un cluster Elasticsearch à 6 nœuds chargé des œuvres complètes de Shakespeare. Pour que l’interface utilisateur affiche les résultats de recherche souhaités, vous devez aider l’équipe à proposer deux requêtes de recherche qui répondent aux exigences.
PUT /shakespeare
{
"mappings": {
"properties": {
"speaker": {"type": "keyword"},
"play_name": {"type": "keyword"},
"line_id": {"type": "integer"},
"speech_number": {"type": "integer"}
}
}
}
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/doc/_bulk?pretty' --data-binary @shakespeare_6.0.json
GET _cat/nodes?v
GET _cat/indices?v
Requête 1 :
GET shakespeare/_search
{
"size": 20,
"sort": [
{
"play_name": {
"order": "asc"
}
},
{
"line_id": {
"order": "asc"
}
}
],
"query": {
"bool": {
"must": [
{
"term": {
"type.keyword": {
"value": "scene"
}
}
},
{
"match": {
"text_entry": "london"
}
}
],
"should": [
{
"term": {
"play_name": {
"value": "Henry VI Part 1"
}
}
},
{
"term": {
"play_name": {
"value": "Henry VI Part 2"
}
}
},
{
"term": {
"play_name": {
"value": "Henry VI Part 3"
}
}
}
],
"minimum_should_match": 1
}
}
}
Requête 2 :
GET shakespeare/_search
{
"from": 0,
"size": 5,
"highlight": {
"pre_tags": ["<strong>"],
"post_tags": ["</strong>"],
"fields": {
"text_entry": {}
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"line_id": {
"order": "asc"
}
}
],
"query": {
"bool": {
"must": [
{
"match": {
"text_entry": "death"
}
}
],
"filter": {
"term": {
"play_name": "Hamlet"
}
}
}
}
}