Skip to content

Commit 091b41d

Browse files
authored
Do misc $search improvements (#973)
* Rename `SearchOptions.defaultSearchOptions` to `searchOptions` * Stop allowing `null` `SearchOptions` in `Aggregates.search`/`searchMeta`
1 parent a14bb7e commit 091b41d

File tree

8 files changed

+61
-64
lines changed

8 files changed

+61
-64
lines changed

driver-core/src/main/com/mongodb/client/model/Aggregates.java

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.Objects;
3636

3737
import static com.mongodb.assertions.Assertions.assertTrue;
38+
import static com.mongodb.client.model.search.SearchOptions.searchOptions;
3839
import static com.mongodb.internal.Iterables.concat;
3940
import static java.util.Arrays.asList;
4041
import static org.bson.assertions.Assertions.notNull;
@@ -671,7 +672,7 @@ public static <TExpression> Bson setWindowFields(@Nullable final TExpression par
671672
* @since 4.7
672673
*/
673674
public static Bson search(final SearchOperator operator) {
674-
return search(operator, null);
675+
return search(operator, searchOptions());
675676
}
676677

677678
/**
@@ -683,17 +684,16 @@ public static Bson search(final SearchOperator operator) {
683684
*
684685
* @param operator A search operator.
685686
* @param options Optional {@code $search} pipeline stage fields.
686-
* Specifying {@code null} is equivalent to either specifying {@link SearchOptions#defaultSearchOptions()}
687-
* or calling {@link #search(SearchOperator)}.
687+
* Specifying {@link SearchOptions#searchOptions()} is equivalent to calling {@link #search(SearchOperator)}.
688688
* @return The {@code $search} pipeline stage.
689689
*
690690
* @mongodb.atlas.manual atlas-search/query-syntax/#-search $search
691691
* @mongodb.atlas.manual atlas-search/operators-and-collectors/#operators Search operators
692692
* @mongodb.atlas.manual atlas-search/scoring/ Scoring
693693
* @since 4.7
694694
*/
695-
public static Bson search(final SearchOperator operator, @Nullable final SearchOptions options) {
696-
return new SearchStage("$search", notNull("operator", operator), options);
695+
public static Bson search(final SearchOperator operator, final SearchOptions options) {
696+
return new SearchStage("$search", notNull("operator", operator), notNull("options", options));
697697
}
698698

699699
/**
@@ -710,7 +710,7 @@ public static Bson search(final SearchOperator operator, @Nullable final SearchO
710710
* @since 4.7
711711
*/
712712
public static Bson search(final SearchCollector collector) {
713-
return search(collector, null);
713+
return search(collector, searchOptions());
714714
}
715715

716716
/**
@@ -720,17 +720,16 @@ public static Bson search(final SearchCollector collector) {
720720
*
721721
* @param collector A search collector.
722722
* @param options Optional {@code $search} pipeline stage fields.
723-
* Specifying {@code null} is equivalent to either specifying {@link SearchOptions#defaultSearchOptions()}
724-
* or calling {@link #search(SearchCollector)}.
723+
* Specifying {@link SearchOptions#searchOptions()} is equivalent to calling {@link #search(SearchCollector)}.
725724
* @return The {@code $search} pipeline stage.
726725
*
727726
* @mongodb.atlas.manual atlas-search/query-syntax/#-search $search
728727
* @mongodb.atlas.manual atlas-search/operators-and-collectors/#collectors Search collectors
729728
* @mongodb.atlas.manual atlas-search/scoring/ Scoring
730729
* @since 4.7
731730
*/
732-
public static Bson search(final SearchCollector collector, @Nullable final SearchOptions options) {
733-
return new SearchStage("$search", notNull("collector", collector), options);
731+
public static Bson search(final SearchCollector collector, final SearchOptions options) {
732+
return new SearchStage("$search", notNull("collector", collector), notNull("options", options));
734733
}
735734

736735
/**
@@ -747,7 +746,7 @@ public static Bson search(final SearchCollector collector, @Nullable final Searc
747746
* @since 4.7
748747
*/
749748
public static Bson searchMeta(final SearchOperator operator) {
750-
return searchMeta(operator, null);
749+
return searchMeta(operator, searchOptions());
751750
}
752751

753752
/**
@@ -758,16 +757,15 @@ public static Bson searchMeta(final SearchOperator operator) {
758757
*
759758
* @param operator A search operator.
760759
* @param options Optional {@code $search} pipeline stage fields.
761-
* Specifying {@code null} is equivalent to either specifying {@link SearchOptions#defaultSearchOptions()}
762-
* or calling {@link #searchMeta(SearchOperator)}.
760+
* Specifying {@link SearchOptions#searchOptions()} is equivalent to calling {@link #searchMeta(SearchOperator)}.
763761
* @return The {@code $searchMeta} pipeline stage.
764762
*
765763
* @mongodb.atlas.manual atlas-search/query-syntax/#-searchmeta $searchMeta
766764
* @mongodb.atlas.manual atlas-search/operators-and-collectors/#operators Search operators
767765
* @since 4.7
768766
*/
769-
public static Bson searchMeta(final SearchOperator operator, @Nullable final SearchOptions options) {
770-
return new SearchStage("$searchMeta", notNull("operator", operator), options);
767+
public static Bson searchMeta(final SearchOperator operator, final SearchOptions options) {
768+
return new SearchStage("$searchMeta", notNull("operator", operator), notNull("options", options));
771769
}
772770

773771
/**
@@ -784,7 +782,7 @@ public static Bson searchMeta(final SearchOperator operator, @Nullable final Sea
784782
* @since 4.7
785783
*/
786784
public static Bson searchMeta(final SearchCollector collector) {
787-
return searchMeta(collector, null);
785+
return searchMeta(collector, searchOptions());
788786
}
789787

790788
/**
@@ -795,16 +793,15 @@ public static Bson searchMeta(final SearchCollector collector) {
795793
*
796794
* @param collector A search collector.
797795
* @param options Optional {@code $search} pipeline stage fields.
798-
* Specifying {@code null} is equivalent to either specifying {@link SearchOptions#defaultSearchOptions()}
799-
* or calling {@link #searchMeta(SearchCollector)}.
796+
* Specifying {@link SearchOptions#searchOptions()} is equivalent to calling {@link #searchMeta(SearchCollector)}.
800797
* @return The {@code $searchMeta} pipeline stage.
801798
*
802799
* @mongodb.atlas.manual atlas-search/query-syntax/#-searchmeta $searchMeta
803800
* @mongodb.atlas.manual atlas-search/operators-and-collectors/#collectors Search collectors
804801
* @since 4.7
805802
*/
806-
public static Bson searchMeta(final SearchCollector collector, @Nullable final SearchOptions options) {
807-
return new SearchStage("$searchMeta", notNull("collector", collector), options);
803+
public static Bson searchMeta(final SearchCollector collector, final SearchOptions options) {
804+
return new SearchStage("$searchMeta", notNull("collector", collector), notNull("options", options));
808805
}
809806

810807
static void writeBucketOutput(final CodecRegistry codecRegistry, final BsonDocumentWriter writer,

driver-core/src/main/com/mongodb/client/model/search/SearchOptions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public interface SearchOptions extends Bson {
7575
* The following code creates two functionally equivalent {@link SearchOptions} objects,
7676
* though they may not be {@linkplain Object#equals(Object) equal}.
7777
* <pre>{@code
78-
* SearchOptions options1 = SearchOptions.defaultSearchOptions().index("indexName");
79-
* SearchOptions options2 = SearchOptions.defaultSearchOptions().option("index", "indexName");
78+
* SearchOptions options1 = SearchOptions.searchOptions().index("indexName");
79+
* SearchOptions options2 = SearchOptions.searchOptions().option("index", "indexName");
8080
* }</pre>
8181
*
8282
* @param name The option name.
@@ -90,7 +90,7 @@ public interface SearchOptions extends Bson {
9090
*
9191
* @return {@link SearchOptions} that represents server defaults.
9292
*/
93-
static SearchOptions defaultSearchOptions() {
93+
static SearchOptions searchOptions() {
9494
return SearchConstructibleBson.EMPTY_IMMUTABLE;
9595
}
9696
}

driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesSearchIntegrationTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
import static com.mongodb.client.model.search.SearchOperator.near;
7272
import static com.mongodb.client.model.search.SearchOperator.numberRange;
7373
import static com.mongodb.client.model.search.SearchOperator.text;
74-
import static com.mongodb.client.model.search.SearchOptions.defaultSearchOptions;
74+
import static com.mongodb.client.model.search.SearchOptions.searchOptions;
7575
import static com.mongodb.client.model.search.SearchPath.fieldPath;
7676
import static com.mongodb.client.model.search.SearchPath.wildcardPath;
7777
import static com.mongodb.client.model.search.SearchScore.boost;
@@ -294,7 +294,7 @@ private static Stream<Arguments> args() {
294294
stageCreator(
295295
// `multi` is used here only to verify that it is tolerated
296296
exists(fieldPath("title").multi("keyword")),
297-
defaultSearchOptions()
297+
searchOptions()
298298
.option("index", "default")
299299
.count(lowerBound().threshold(2_000))
300300
),
@@ -314,7 +314,7 @@ private static Stream<Arguments> args() {
314314
"`highlight` option",
315315
stageCreator(
316316
text(singleton(fieldPath("plot")), asList("factory", "century")),
317-
defaultSearchOptions()
317+
searchOptions()
318318
.highlight(paths(
319319
fieldPath("title").multi("keyword"),
320320
wildcardPath("pl*t"))
@@ -336,7 +336,7 @@ private static Stream<Arguments> args() {
336336
"`returnStoredSource` option",
337337
stageCreator(
338338
exists(fieldPath("plot")),
339-
defaultSearchOptions()
339+
searchOptions()
340340
.returnStoredSource(true)
341341
),
342342
MFLIX_MOVIES_NS,
@@ -360,7 +360,7 @@ private static Stream<Arguments> args() {
360360
"alternate analyzer (`multi` field path)",
361361
stageCreator(
362362
text(singleton(fieldPath("title").multi("keyword")), singleton("The Cheat")),
363-
defaultSearchOptions().count(total())
363+
searchOptions().count(total())
364364
),
365365
MFLIX_MOVIES_NS,
366366
asList(
@@ -398,7 +398,7 @@ private static Stream<Arguments> args() {
398398
Instant.from(Year.of(1985)
399399
.atMonth(Month.JANUARY).atDay(1).atStartOfDay().atOffset(UTC)),
400400
Instant.now())))),
401-
defaultSearchOptions()
401+
searchOptions()
402402
),
403403
MFLIX_MOVIES_NS,
404404
asList(

driver-core/src/test/unit/com/mongodb/client/model/AggregatesSpecification.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ import static com.mongodb.client.model.search.SearchCount.total
8989
import static com.mongodb.client.model.search.SearchFacet.stringFacet
9090
import static com.mongodb.client.model.search.SearchHighlight.paths
9191
import static com.mongodb.client.model.search.SearchOperator.exists
92-
import static com.mongodb.client.model.search.SearchOptions.defaultSearchOptions
92+
import static com.mongodb.client.model.search.SearchOptions.searchOptions
9393
import static com.mongodb.client.model.search.SearchPath.fieldPath
9494
import static com.mongodb.client.model.search.SearchPath.wildcardPath
9595
import static java.util.Arrays.asList
@@ -624,7 +624,7 @@ class AggregatesSpecification extends Specification {
624624
BsonDocument searchDoc = toBson(
625625
search(
626626
(SearchOperator) exists(fieldPath('fieldName')),
627-
defaultSearchOptions()
627+
searchOptions()
628628
)
629629
)
630630

@@ -641,7 +641,7 @@ class AggregatesSpecification extends Specification {
641641
(SearchCollector) facet(
642642
exists(fieldPath('fieldName')),
643643
[stringFacet('stringFacetName', fieldPath('fieldName1'))]),
644-
defaultSearchOptions()
644+
searchOptions()
645645
.index('indexName')
646646
.count(total())
647647
.highlight(paths(
@@ -715,7 +715,7 @@ class AggregatesSpecification extends Specification {
715715
BsonDocument searchDoc = toBson(
716716
searchMeta(
717717
(SearchOperator) exists(fieldPath('fieldName')),
718-
defaultSearchOptions()
718+
searchOptions()
719719
)
720720
)
721721

@@ -732,7 +732,7 @@ class AggregatesSpecification extends Specification {
732732
(SearchCollector) facet(
733733
exists(fieldPath('fieldName')),
734734
[stringFacet('stringFacetName', fieldPath('fieldName1'))]),
735-
defaultSearchOptions()
735+
searchOptions()
736736
.index('indexName')
737737
.count(total())
738738
.highlight(paths(

driver-core/src/test/unit/com/mongodb/client/model/search/SearchOptionsTest.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232

3333
final class SearchOptionsTest {
3434
@Test
35-
void defaultSearchOptions() {
35+
void searchOptions() {
3636
assertEquals(
3737
new BsonDocument(),
38-
SearchOptions.defaultSearchOptions()
38+
SearchOptions.searchOptions()
3939
.toBsonDocument()
4040
);
4141
}
@@ -44,18 +44,18 @@ void defaultSearchOptions() {
4444
void option() {
4545
assertAll(
4646
() -> assertEquals(
47-
SearchOptions.defaultSearchOptions()
47+
SearchOptions.searchOptions()
4848
.index("indexName")
4949
.toBsonDocument(),
50-
SearchOptions.defaultSearchOptions()
50+
SearchOptions.searchOptions()
5151
.option("index", new BsonString("indexName"))
5252
.toBsonDocument()
5353
),
5454
() -> assertEquals(
55-
SearchOptions.defaultSearchOptions()
55+
SearchOptions.searchOptions()
5656
.option("index", "indexName")
5757
.toBsonDocument(),
58-
SearchOptions.defaultSearchOptions()
58+
SearchOptions.searchOptions()
5959
.option("index", new BsonString("indexName"))
6060
.toBsonDocument()
6161
)
@@ -67,7 +67,7 @@ void index() {
6767
assertEquals(
6868
new BsonDocument()
6969
.append("index", new BsonString("indexName")),
70-
SearchOptions.defaultSearchOptions()
70+
SearchOptions.searchOptions()
7171
.index("indexName")
7272
.toBsonDocument()
7373
);
@@ -80,7 +80,7 @@ void highlight() {
8080
new BsonDocument()
8181
.append("highlight", new BsonDocument()
8282
.append("path", wildcardPath("wildc*rd").toBsonValue())),
83-
SearchOptions.defaultSearchOptions()
83+
SearchOptions.searchOptions()
8484
.highlight(
8585
paths(wildcardPath("wildc*rd")))
8686
.toBsonDocument()
@@ -91,7 +91,7 @@ void highlight() {
9191
.append("path", new BsonArray(asList(
9292
wildcardPath("wildc*rd").toBsonValue(),
9393
fieldPath("fieldName").toBsonValue())))),
94-
SearchOptions.defaultSearchOptions()
94+
SearchOptions.searchOptions()
9595
.highlight(
9696
paths(
9797
wildcardPath("wildc*rd"),
@@ -106,7 +106,7 @@ void count() {
106106
assertEquals(
107107
new BsonDocument()
108108
.append("count", total().toBsonDocument()),
109-
SearchOptions.defaultSearchOptions()
109+
SearchOptions.searchOptions()
110110
.count(total())
111111
.toBsonDocument()
112112
);
@@ -117,7 +117,7 @@ void returnStoredSource() {
117117
assertEquals(
118118
new BsonDocument()
119119
.append("returnStoredSource", new BsonBoolean(true)),
120-
SearchOptions.defaultSearchOptions()
120+
SearchOptions.searchOptions()
121121
.returnStoredSource(true)
122122
.toBsonDocument()
123123
);
@@ -133,7 +133,7 @@ void options() {
133133
.append("path", fieldPath("fieldName").toBsonValue()))
134134
.append("count", total().toBsonDocument())
135135
.append("returnStoredSource", new BsonBoolean(true)),
136-
SearchOptions.defaultSearchOptions()
136+
SearchOptions.searchOptions()
137137
.index("indexName")
138138
.option("name", new BsonArray(singletonList(new BsonString("value"))))
139139
.highlight(
@@ -145,16 +145,16 @@ void options() {
145145
}
146146

147147
@Test
148-
void defaultSearchOptionsIsUnmodifiable() {
149-
String expected = SearchOptions.defaultSearchOptions().toBsonDocument().toJson();
150-
SearchOptions.defaultSearchOptions().option("name", "value");
151-
assertEquals(expected, SearchOptions.defaultSearchOptions().toBsonDocument().toJson());
148+
void searchOptionsIsUnmodifiable() {
149+
String expected = SearchOptions.searchOptions().toBsonDocument().toJson();
150+
SearchOptions.searchOptions().option("name", "value");
151+
assertEquals(expected, SearchOptions.searchOptions().toBsonDocument().toJson());
152152
}
153153

154154
@Test
155-
void defaultSearchOptionsIsImmutable() {
156-
String expected = SearchOptions.defaultSearchOptions().toBsonDocument().toJson();
157-
SearchOptions.defaultSearchOptions().toBsonDocument().append("name", new BsonString("value"));
158-
assertEquals(expected, SearchOptions.defaultSearchOptions().toBsonDocument().toJson());
155+
void searchOptionsIsImmutable() {
156+
String expected = SearchOptions.searchOptions().toBsonDocument().toJson();
157+
SearchOptions.searchOptions().toBsonDocument().append("name", new BsonString("value"));
158+
assertEquals(expected, SearchOptions.searchOptions().toBsonDocument().toJson());
159159
}
160160
}

0 commit comments

Comments
 (0)