Je cherche à faire une recherche sur plusieurs champs de type commençant par (en java)
Si l'utilisateur fait un espace, je veux faire un ou.
J'ai fait plusieurs essai de requêtes, et je ne comprend pas toujours la logique
Voici un premier code qui marche
{
"query": {
"filtered": {
"query": {
"query_string": {
"fields": [
"serial",
"produit"
],
"query": "sn15* AND produit1*"
}
}
}
}
}
C'est la requête la plus simple à priori, mais je dois modifier la saisie utilisateur et ajouter le AND à la place du espace.
Cette fonction est-elle la plus optimisé et la plus performante?
Au passage, existe-t-il dans l'api java elasticsearch une fonction utilitaire qui échappe la saisie utilisateur pour éviter qu'il puisse directement saisir les * ? et opérateur, ou doit-je la faire à la main?
Première requête avec l'api JAva
Par contre, avec l'api Java, j'était parti au départ sur AndFilterBuilder et un multiMatchQuery et je n'ai pas le même résultat, sans que je comprenne pourquoi et j'aime comprendre
Voila le code généré par l'api Java
{
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"query" : {
"multi_match" : {
"query" : "sn15",
"fields" : [ "serial", "produit" ],
"type" : "phrase_prefix"
}
}
}, {
"query" : {
"multi_match" : {
"query" : "produit1",
"fields" : [ "serial","produit" ],
"type" : "phrase_prefix"
}
}
} ]
}
}
}
}
}
bien que plus complexe, cette requête devrait me retourner théoriquement la même chose non? Elle ne me retourne que 11 résultats (contre 318 pour l'autres).
Le plus étonnant, c'est que plus si je met juste "sn" à la place de "sn15", j'ai moins de résultats.
Seriez-vous m'expliquer pourquoi?