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
$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)
compound unterstützt must, mustNot, should, filter, minimumShouldMatch, score und es kann auch ein allgemeiner AtlasSearchOperator direkt übergeben werden.
Text / Phrase / Autocomplete
• 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
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(...).
Score und Sortierung
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
Der Standardalias ist highlights, scoreDetails, searchSequenceToken. addFieldsScoreDetails() aktiviert auch die Score-Details der Suchoption.
Paging / Sequenz-Token / Anzahl
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
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.