Búsqueda en Atlas

Configura el operador de búsqueda de Atlas, compuesto/filtro, puntuación, resaltado, token de secuencia, paginación/cuenta y la ruta de extensión nativa del Driver según la versión 1.0.0.


Búsqueda básica de Atlas

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 y $searchMeta deben ser la primera etapa del pipeline de agregación, por lo que están separados del flujo general fields(...).end(). También se puede usar .search() omitiendo el índice.

Operador de búsqueda

• constructor raíz: text, phrase, autocomplete, equals, exists, in, range, compound

• cláusula reutilizable: SearchOperators.text/phrase/autocomplete/equals/in/exists/range

• operador raíz nativo del Driver: operator(SearchOperator)

• wrapper de Driver nombrado: 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 admite must, mustNot, should, filter, minimumShouldMatch, score y también se puede pasar un AtlasSearchOperator general directamente.

Texto / Frase / Autocompletar

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

• text: ruta(s), consulta(s), difusa, criterios de coincidencia, sinónimos, puntuación

• phrase: ruta(s), consulta(s), slop, sinónimos, puntuación

• autocomplete: ruta única, consulta(s), orden de tokens, difusa, puntuación

• fuzzy(...) y synonyms(...) no se utilizan simultáneamente.

Diferencia entre cláusula de búsqueda y campos post-búsqueda

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

search().fields(...) no es un filtro interno de $search, sino un $match general después de $search. Para limitar candidatos en la etapa de índice de búsqueda, use compound.filter(...).

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

Puntuación y ordenación

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() y la ordenación general se priorizan según el orden de llamada. Para una paginación estable, es recomendable tener una ordenación de campo único estable junto con la puntuación.

Detalles de Resaltado / puntuación / token de secuencia

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

El alias predeterminado es highlights, scoreDetails, searchSequenceToken. addFieldsScoreDetails() también activa los detalles de puntuación de la opción de búsqueda.

Paginación / token de secuencia / conteo

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

Conteo final del pipeline que refleja post-search fields(...) y el umbral de puntuación.

count().executeSearchMeta()

Conteo de metadatos de $searchMeta. Soporta SearchCountType.TOTAL/LOWER_BOUND y no ejecuta $match post-búsqueda.

existsQuery().execute()

Verifica si hay más de un resultado en el pipeline de búsqueda.

Extensión nativa del controlador

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

stage(Bson) se coloca justo después de $search y no se aplica al pipeline de conteo de metadatos de executeSearchMeta(). Si una nueva función del controlador se agrega antes que la API de conveniencia DSL, se priorizan operator, driverOptions, stage, SortSpec.driver, customizeAggregation.

© 2026 Byeolnaerim. Todos los derechos reservados.IntroducciónPolítica de privacidad