Bonjour,
j'ai index contenant plusieurs formations, quand je fais une recherche sur le titre de la formation: une formation n'est pas présente dans le résultat de recherche.
Création de l'index:
DELETE formation
PUT formation
{
  "settings": {
    "analysis": {
      "analyzer": {
        "word": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "asciifolding"
          ],
          "char_filter": []
        },
        "prefix": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "asciifolding",
            "prefix_filter"
          ],
          "char_filter": []
        }
      },
      "filter": {
        "prefix_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 25
        }
      }
    }
  },
  "mappings": {
    "formation": {
      "properties": {
        "label": {
          "type": "text",
          "analyzer": "word",
          "fields": {
            "prefix": {
              "type": "text",
              "analyzer": "prefix",
              "search_analyzer": "word",
              "norms": false
            }
          },
          "norms": false
        }
      }
    }
  }
}
Ajout des données:
POST _bulk
{ "index":{ "_id": "1", "_index": "formation", "_type": "formation" } }
{ "label":"Cybersécurité" }
{ "index":{ "_id": "2", "_index": "formation", "_type": "formation" } }
{ "label":"Cyber sécurité" }
{ "index":{ "_id": "3", "_index": "formation", "_type": "formation" } }
{ "label":"Agent de sécurité" }
{ "index":{ "_id": "4", "_index": "formation", "_type": "formation" } }
{ "label":"Agent de formation" }
Ma requête:
GET formation/formation/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "multi_match": {
                "query": "cybersecurite",
                "fields": [
                  "label.prefix"
                ]
              }
            }
          ]
        }
      },
      "functions": [
        {
          "filter": {
            "multi_match": {
              "query": "cybersecurite",
              "fields": [
                "label"
              ]
            }
          },
          "weight": 10
        }
      ],
      "score_mode": "multiply"
    }
  }
}
Resultat de la recherche:
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 2.8768208,
    "hits": [
      {
        "_index": "formation",
        "_type": "formation",
        "_id": "1",
        "_score": 2.8768208,
        "_source": {
          "label": "Cybersécurité"
        }
      }
    ]
  }
}
Ma question: pourquoi la formation avec le label "Cyber sécurité" n'est pas dans le résultat de recherche ?
est-ce que je doit définir des synonymes ?
Merci
Remarque: la requête de recherche me permet de faire une priorisation des résultats par rapport à la présenece de mot rechercher dans plusieurs champs, c'est pour cette raison que j'utilise function_score
