Recherche Atlas

Configurez l'opérateur de recherche Atlas, le chemin d'extension Driver-native pour compound/filter, score, highlight, sequence token, paging/count selon la version 1.0.0.


Recherche Atlas de base

java
Flux<Article> results = dsl
    .executeEntity(Article.class, MongoTemplateName.FRONT)
    .search("articles_default")
    .text(text -> text
        .path("title")
        .query("reactive mongo dsl")
    )
    .findAll()
    .execute();

$search et $searchMeta doivent être la première étape du pipeline d'agrégation, donc ils sont séparés du flux général fields(...).end(). Vous pouvez également utiliser .search() sans index.

Opérateur de recherche

• constructeur racine : text, phrase, autocomplete, equals, exists, in, range, compound

• clause réutilisable : SearchOperators.text/phrase/autocomplete/equals/in/exists/range

• opérateur racine Driver-native : operator(SearchOperator)

• wrapper Driver nommé : SearchOperators.driver(name, operator)

java
.search("articles_default")
.compound(compound -> compound
    .mustText("title", text -> text.query("mongodb"))
    .shouldText("summary", text -> text.query("mongodb"))
    .filterEquals("status", eq -> eq.value("PUBLISHED"))
    .mustNotExists("deletedAt")
    .minimumShouldMatch(0)
)
.findAll()
.execute();

compound prend en charge must, mustNot, should, filter, minimumShouldMatch, score et vous pouvez également passer directement un AtlasSearchOperator.

Texte / Phrase / Autocomplete

java
.text(text -> text
    .paths("title", "summary")
    .query("reactive mongo dsl")
    .matchCriteria(SearchMatchCriteria.ALL)
    .fuzzy(1, 1, 50)
    .score(SearchScoreSpec.boost(3.0))
)

• text : chemin(s), requête(s), fuzzy, matchCriteria, synonymes, score

• phrase : chemin(s), requête(s), slop, synonymes, score

• autocomplete : chemin unique, requête(s), tokenOrder, fuzzy, score

• fuzzy(...) et synonyms(...) ne sont pas utilisés simultanément.

Différence entre la clause de recherche et les champs post-recherche

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.fields(
    pair("deleted", false),
    pair("status", "PUBLISHED")
)
.findAll()
.execute();

search().fields(...) n'est pas un filtre interne de $search, mais un $match général après $search. Pour limiter les candidats à l'étape de l'index de recherche, utilisez compound.filter(...).

text
$search
-> stage(Bson) if configured
-> $match (fields)
-> metadata addFields / score match
-> paging
-> projection

Score et tri

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.addFieldsScore("searchScore")
.matchScoreGte(1.5)
.scoreDesc()
.sorts(sort -> sort.desc("publishedAt").desc("id"))
.findAll()
.execute();

scoreDesc()/scoreAsc() et le tri général sont prioritaires dans l'ordre d'appel. Pour une pagination stable, il est conseillé d'utiliser un tri de champ unique stable avec le score.

Détails sur le surlignage / score / token de séquence

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.highlight(highlight -> highlight
    .path("title")
    .maxCharsToExamine(100_000)
    .maxNumPassages(3)
)
.addFieldsHighlights()
.addFieldsScoreDetails()
.addFieldsSequenceToken()
.findAll()
.execute();

L'alias par défaut est highlights, scoreDetails, searchSequenceToken. addFieldsScoreDetails() active également les détails de score de l'option de recherche.

Pagination / token de séquence / compte

java
Mono<PageResult<Article>> page = dsl
    .executeEntity(Article.class, key)
    .search("articles_default")
    .text(text -> text.path("title").query("mongodb"))
    .paging(0, 20)
    .findAll()
    .executePage();

// sequence token
.searchAfter(token)
// or
.searchBefore(token)

count().execute()

C'est le compte final du pipeline prenant en compte post-search fields(...) et le seuil de score.

count().executeSearchMeta()

C'est le compte des métadonnées $searchMeta. Il prend en charge SearchCountType.TOTAL/LOWER_BOUND et ne lance pas $match après la recherche.

existsQuery().execute()

Vérifie s'il existe plus d'un résultat dans le pipeline de recherche.

Extension native du pilote

java
.search("search-index")
.operator(driverSearchOperator)
.driverOptions(options -> options.option("someNewOption", value))
.stage(Aggregates.score("$rating"))
.findAll()
.execute();

stage(Bson) est ajouté juste après $search et ne s'applique pas au pipeline de compte de métadonnées $searchMeta de executeSearchMeta(). Si de nouvelles fonctionnalités du pilote sont ajoutées avant l'API de commodité DSL, utilisez d'abord operator, driverOptions, stage, SortSpec.driver, customizeAggregation.

© 2026 Byeolnaerim. Tous droits réservés.PrésentationPolitique de confidentialité