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