Requête qui retourne les matchs exact en slop(0) et slop(1) en une seule requête


(Blured Derulb) #1

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.


(system) #2