Bonjour,

Je n'arrive pas à faire marcher correctement ma requête Elasticsearch, je fais une recherche sur un seul champ, l'utilisateur peut tapper autant de mots clés qu'il le souhaite. Le problème, c'est que le score ne se calcule pas en fonction du nombre de mots clés trouvés, par exemple :
J'ai un intitulé de formation qui s'apelle "Programmation" et une autre formation qui s'appelle "Programmation informatique"
si je tappe "programmation informatique", le résultat "Programmation" arrivera en premier dans les resultats de la recherche alors que ca match sur 2 mots clés !

Voici ma requête :

        $client = ClientBuilder::create()->build();

        $params = [
            'index' => 'form',
            'type' => 'formations',
            "from" => 0, "size" => 40,
            "body" => [
                "query" => [
                    "bool" => [
                        "must" => [
                            "match" => [
                                "intitule" => [
                                    "query" => $request->research,
                                    "boost" => 50
                                ]
                            ],
                        ],
                        "should" => [
                            "multi_match" => [
                                "type" => "cross_fields",
                                "fields" => ["villes^50", "sessions^50"],
                                "query" => $request->research,
                                "operator" => "OR",

                            ]
                        ]
                    ]
                ]
            ]

        ];
        $response = $client->search($params);

J'ai également mis un analyzeur :

PUT /form
{
  "settings": {
    "analysis": {
      "filter": {
        "french_elision": {
          "type":         "elision",
          "articles_case": true,
          "articles": [
              "l", "m", "t", "qu", "n", "s",
              "j", "d", "c", "jusqu", "quoiqu",
              "lorsqu", "puisqu"
            ]
        },
        "french_stop": {
          "type":       "stop",
          "stopwords":  "_french_" 
        },
        "french_keywords": {
          "type":       "keyword_marker",
          "keywords":   ["Exemple"] 
        },
        "french_stemmer": {
          "type":       "stemmer",
          "language":   "light_french"
        }
      },
      "analyzer": {
        "french": {
          "tokenizer":  "standard",
          "filter": [
            "french_elision",
            "lowercase",
            "asciifolding",
            "french_stop",
            "french_keywords",
            "french_stemmer"
          ]
        }
      },
    }

  },
    "mappings": {
    "formations": {
      "properties": {
        "intitule":{
         "type" : "text",
         "analyzer": "french"
        }

      }
    }
    }
}

Si quelqu'un peut m'aider ! j'ai essayé vraiment beaucoup de choses mais pas moyen ! :/
Merci d'avance,
Alex

Aucune réponse