Atlas-Suche

Konfiguration des Atlas Search Operators, compound/filter, score, highlight, sequence token, paging/count und Driver-native Erweiterungspfad basierend auf 1.0.0.


Standard Atlas Search

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 und $searchMeta müssen die erste Stufe der Aggregationspipeline sein, daher sind sie von dem allgemeinen fields(...).end()-Fluss getrennt. Es kann auch .search() ohne Index verwendet werden.

Suchoperator

• Root-Builder: text, phrase, autocomplete, equals, exists, in, range, compound

• Wiederverwendbare Klausel: SearchOperators.text/phrase/autocomplete/equals/in/exists/range

• Driver-native Root-Operator: operator(SearchOperator)

• Benannter Driver-Wrapper: 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 unterstützt must, mustNot, should, filter, minimumShouldMatch, score und es kann auch ein allgemeiner AtlasSearchOperator direkt übergeben werden.

Text / 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: Pfad(e), Abfrage(n), fuzzy, matchCriteria, Synonyme, Score

• phrase: Pfad(e), Abfrage(n), slop, Synonyme, Score

• autocomplete: einzelner Pfad, Abfrage(n), tokenOrder, fuzzy, Score

• fuzzy(...) und synonyms(...) werden nicht gleichzeitig verwendet.

Unterschied zwischen Suchklausel und Post-Suchfeldern

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

search().fields(...) ist kein internes Filter von $search, sondern ein allgemeines $match nach $search. Um Kandidaten in der Suchindex-Phase einzuschränken, verwenden Sie compound.filter(...).

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

Score und Sortierung

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() und allgemeine Sortierung haben Priorität in der Reihenfolge, in der sie aufgerufen werden. Für eine stabile Paginierung ist es ratsam, die Sortierung nach Score mit einem stabilen, eindeutigen Feld zu kombinieren.

Highlight / Score-Details / Sequenz-Token

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();

Der Standardalias ist highlights, scoreDetails, searchSequenceToken. addFieldsScoreDetails() aktiviert auch die Score-Details der Suchoption.

Paging / Sequenz-Token / Anzahl

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()

Die endgültige Pipeline-Anzahl, die die post-search fields(...) und den Score-Schwellenwert berücksichtigt.

count().executeSearchMeta()

Die $searchMeta Metadatenanzahl. Unterstützt SearchCountType.TOTAL/LOWER_BOUND und führt kein post-search $match aus.

existsQuery().execute()

Überprüft, ob das Ergebnis der Suchpipeline mehr als einen Datensatz enthält.

Driver-native Erweiterung

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

stage(Bson) wird direkt nach $search eingefügt und wird nicht auf die $searchMeta Metadatenanzahl-Pipeline von executeSearchMeta() angewendet. Wenn neue Driver-Funktionen vor der DSL Convenience-API hinzugefügt werden, werden operator, driverOptions, stage, SortSpec.driver, customizeAggregation bevorzugt verwendet.

© 2026 Byeolnaerim. Alle Rechte vorbehalten.EinführungDatenschutzrichtlinie