Je voudrais pour obtenir les résultats de ma recherche selon cet ordre :
Documents qui matchent exactement exactement (Tous les mots doivent exister dans les documents retournés, les documents retournés ne doivent pas avoir plus de mot que ceux recherchés)
Documents qui matchent partiellement (Tous les mots recherchés doivent exister (+ synonymes éventuels + fuzzy –inversion de caractère -)
Documents qui matchent en fuzzy (Tous les mots recherchés doivent exister + fuzzy correction + phonetic)
Documents qui matchent en related (50% des mots de la recherche doivent être trouvés)
J’ai pris le parti de faire 4 requêtes Elastic et de merger les résultats en java, ça fonctionne mais ça me semble un peu usine à gaz. N’y aurait il pas moyen de faire une seule requête elastic à la place ?
Hello @Blured_Derulb en effet comme dit @dadoonet tu peut utiliser le bool query, je peut te donner une example :
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "the walking dead saison 6",
"type": "best_fields",
"fields": [
"tags", "description"
],
"boost": 6
}
},
{
"multi_match": {
"query": "the walking dead saison 6",
"type": "phrase",
"slop": 4,
"fields": [
"title^5",
"content"
],
"boost": 6
}
},
{
"match": {
"title": {
"query": "the walking dead saison 6",
"operator": "or",
"analyzer": "stemmer_letter_stop_words"
}
}
}
],
"minimum_number_should_match": 1
}
},
"sort": {
"_score": {
"order": "desc"
}
}}
apres pour ce qui est de fuzzy ça peut etre une operation tres lourd et ça peut ralentir ta requete principal, moi j'ai pris comme option de faire une autre requete apart en ajax et comme google proposer le resultat en dehors des resultats de recheche, une genre de :
search : halking dead saison 6
what do you mean ? walking dead saison 6 (resultat de ma query ajax fuzzy)
et ici tous les resultats recuperes pour ma query principal pour la recherche "halking dead saison 6"...
(et vu que dans ma query j'ai un analyser stemmer_letter_stop_words je vais quand meme trouver le document avec le title: walking dead saison 6)
Etonnant j'ai des scores non entiers quand j'utilise la requête portée sous l'API Java :
Normalement, il ne devrait y avoir que des scores en 1, 7 ou 15 ou des cumuls de ces chiffres, or avec l'api Java je me retrouve avec des scores en plus de ceux qui me paraissent cohérent : 14.666667, 5.3333335, 2.333333
Après vérification de la chaine XML générée, il s'avère que le coding via l'api génère :
On dirait que dans les résultats dans le cas de l'utilisation de functions[] on a un mix des script function_score et du tf/idf ou quelque chose comme ça, alors que quand "script_score" est utilisé directement le tf/idf est ignoré. Bizarre non ?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.