Bonjour,
Je cherche à faire une requête qui cumule le résultat des matchs des résultats pour une phrase query en slop 0 et en slop 1 en me sortant en score un score fixe de 10 pour les matchs en slop 0 et de 20 pour les matchs en slop 1
Les requêtes basiques que j'utilise :
QueryBuilder allTermsLong = matchPhraseQuery("text", query.originalText)
.operator(org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND)
.fuzziness(Fuzziness.ZERO)
.minimumShouldMatch("100%").slop(1);
QueryBuilder allTerms = matchPhraseQuery("text", query.originalText)
.operator(org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND)
.fuzziness(Fuzziness.ZERO)
.minimumShouldMatch("100%").slop(0);
SearchRequestBuilder srb = elasticSearchService.getClient().prepareSearch("labels-zz","labels-fr")
.setTypes(getTypesName(query)).setSize(FETCH_SIZE).setExplain(false)
.setTrackScores(true).setNoFields()
.setFetchSource(FETCH_SOURCES);
srb.setQuery(allTerms);
SearchRequestBuilder srb1 = elasticSearchService.getClient().prepareSearch("labels-zz","labels-fr")
.setTypes(getTypesName(query)).setSize(FETCH_SIZE).setExplain(false)
.setTrackScores(true).setNoFields()
.setFetchSource(FETCH_SOURCES);
srb.setQuery(allTermsLong);
Actuellement j'exécute ces 2 requêtes et je merge les résultats dans mon middle.
J'aimerais pour des raisons de performance faire celà en une seule requête. Est ce possible ? Genre avec une filter query sur le slop par exemple ?
Cordialement,
Blured.