Interface Search<R>
- Type Parameters:
R- the default result type returned by terminal operations without an explicit class. Class-based searches establish this type automatically; dynamic collection names can use an explicit type witness at the search entry point.
- All Known Implementing Classes:
DefaultDocumentStore.DefaultGraphSearch, DefaultDocumentStore.DefaultSearch
A Search instance is typically obtained via Fluxzero.search(DocumentType.class) or
Fluxzero.<DocumentType>search("collectionName") and can be configured using a combination of time-based
constraints, field constraints, sorting rules, pagination, and content selection.
The search is only executed when a terminal operation like fetch(...) or stream() is invoked.
Supported operations include:
- Time-based filtering (e.g.
since(Instant),inLast(Duration)) - Content-based filtering (e.g.
match(Object, String...),query(String, String...)) - Sorting and pagination (e.g.
sortByTimestamp(),skip(Integer)) - Aggregation and facets (e.g.
aggregate(String...),facetStats()) - Streaming and fetching results (e.g.
stream(),fetch(int))
Example usage:
List<MyDocument> results = Fluxzero.search(MyDocument.class)
.inLast(Duration.ofDays(30))
.match("searchTerm", "title", "description")
.sortByTimestamp(true)
.fetch(50);
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe default number of records to fetch in a single batch during search operations. -
Method Summary
Modifier and TypeMethodDescriptionReturns field statistics for one or more fields.default CompletableFuture<Map<String, io.fluxzero.common.api.search.DocumentStats.FieldStats>> aggregateAsync(String... fields) Asynchronously returns field statistics for one or more fields.all(io.fluxzero.common.api.search.Constraint... constraints) Combines multiple constraints using a logical AND.any(io.fluxzero.common.api.search.Constraint... constraints) Combines multiple constraints using a logical OR.Constrains the search to documents that have any of the given paths.Adds a lower-bound constraint for a field.Filters documents with timestamps strictly before the given end time.Filters documents with timestamps before the given time.Filters and returns search results that occur before the specified end date, inclusive.beforeLast(Duration period) Filters out documents older than the given duration.Adds an upper-bound constraint for a field.Adds a numeric range constraint.constraint(io.fluxzero.common.api.search.Constraint... constraints) Adds one or more custom constraints to the search using a logical AND.default Longcount()Returns the number of matching documents.default CompletableFuture<Long> Asynchronously returns the number of matching documents.default CompletableFuture<Void> delete()Deletes all matching documents in the current search.delete(int batchSize) Deletes all matching documents in the current search, using the requested batch size to control how many documents are removed by each delete statement.Excludes specific fields from the returned documents.List<io.fluxzero.common.api.search.FacetStats> Returns facet statistics for the current search.CompletableFuture<List<io.fluxzero.common.api.search.FacetStats>> Asynchronously returns facet statistics for the current search.fetch(int maxSize) Fetches up to the given number of matching documents and deserializes them to the stored type.<T> List<T> Fetches up to the given number of documents and deserializes them to the specified type.fetchAll()Fetches all matching documents and deserializes each to its stored type.default <T> List<T> Fetches all matching documents and deserializes them to the specified type.default CompletableFuture<List<R>> fetchAsync(int maxSize) Asynchronously fetches up to the given number of matching documents and deserializes them to the stored type.<T> CompletableFuture<List<T>> fetchAsync(int maxSize, Class<T> type) Asynchronously fetches up to the given number of documents and deserializes them to the specified type.Fetches the first matching document if available and deserializes it to the stored type.default <T> Optional<T> fetchFirst(Class<T> type) Fetches the first matching document if available and deserializes it as an optional value of the specified type.default RFetches the first matching document if available and deserializes it to the stored type.default <T> TfetchFirstOrNull(Class<T> type) Fetches the first matching document if available and deserializes it to the specified type.io.fluxzero.common.api.search.SearchHistogramfetchHistogram(int resolution, int maxSize) Computes a histogram for the timestamp distribution of matching documents.Groups search results by field(s) and supports aggregations.includeOnly(String... paths) Includes only the specified fields in the returned documents.Filters documents within the last given duration (e.g., last 7 days).Filters documents within a specified time range.Filters documents within the given time range.Filters the search results to include only those within the specified date range.Adds a full-text lookahead constraint using the specified phrase.Adds a match constraint, optionally enforcing strict equality.Adds an equality match constraint for the given value across one or more paths.matchFacet(String name, Object value) Matches the value of a named facet.matchMetadata(String key, Object value) Matches a metadata key to a value.Moves all matching documents in the current search to the given collection.not(io.fluxzero.common.api.search.Constraint constraint) Negates a constraint using a logical NOT.Adds a full-text search constraint for the given phrase.relation(io.fluxzero.common.api.search.ModelRelationConstraint... constraints) Adds advanced current-state model relationship constraints using logical AND.Filters documents with timestamps since the given start time (inclusive).Filters documents with timestamps since the given start time.Initiates a search operation from a specified start date.Skips the first N results.Sorts results by a specific document field.Sorts results by a field, with control over the sort direction.sortBy(String path, boolean descending, Search.NullOrder nullOrder) Sorts results by a field, with control over both sort direction and null ordering.sortBy(String path, Search.NullOrder nullOrder) Sorts results by a specific document field, with explicit null ordering.Sorts results by full-text relevance score.Sorts results by timestamp in ascending order.sortByTimestamp(boolean descending) Sorts results by timestamp.sortByTimestamp(boolean descending, Search.NullOrder nullOrder) Sorts results by timestamp, with explicit null ordering.stream()Streams matching values, deserializing each to the stored type.stream(int fetchSize) Streams matching values, deserializing each to the stored type.default <T> Stream<T> Streams matching values, deserializing each to the specified type.default <T> Stream<T> Streams matching values, deserializing each to the specified type.Streams raw search hits (document + metadata).streamHits(int fetchSize) Streams raw search hits (document + metadata).streamHits(Class<T> type) Streams raw search hits (document + metadata).streamHits(Class<T> type, int fetchSize) Streams raw search hits (document + metadata).default <T> InputStreamtoInputStream(Class<T> type, io.fluxzero.common.ThrowingBiConsumer<T, OutputStream> writer) Streams matching values of the specified type as a lazily populatedInputStream.default <T> InputStreamtoInputStream(Class<T> type, io.fluxzero.common.ThrowingBiConsumer<T, OutputStream> writer, int fetchSize) Streams matching values of the specified type as a lazily populatedInputStream, fetching documents in batches offetchSize.default InputStreamStreams matching values as NDJSON using the stored document types and the default fetch size.default <T> InputStreamtoUtf8InputStream(Class<T> type, io.fluxzero.common.ThrowingFunction<T, String> mapper) Streams matching values of the specified type as a lazily populated UTF-8InputStream.default <T> InputStreamtoUtf8InputStream(Class<T> type, io.fluxzero.common.ThrowingFunction<T, String> mapper, int fetchSize) Streams matching values of the specified type as a lazily populated UTF-8InputStream, fetching documents in batches offetchSize.whereAncestor(Graph<?> ancestor) Requires the supplied existing Model graph to be an ancestor at any supported depth.whereAncestor(Graph<?> ancestor, int minDepth, int maxDepth) Requires the supplied existing Model graph to be an ancestor within the given depth range.whereAncestor(Id<?> ancestorId) Requires an ancestor with the supplied typed identity at any supported depth.whereAncestor(Id<?> ancestorId, int minDepth, int maxDepth) Requires an ancestor with the supplied typed identity within the given depth range.whereAncestor(Object collection, int minDepth, int maxDepth, io.fluxzero.common.api.search.Constraint... constraints) Requires an ancestor document within the supplied depth range to match the document constraints.whereAncestor(Object collection, io.fluxzero.common.api.search.Constraint... constraints) Requires an ancestor document at any supported depth to match the supplied document constraints.whereAncestor(Object ancestorId, Class<?> ancestorType) Requires an ancestor with the supplied functional identity and Model type at any supported depth.whereAncestor(Object ancestorId, Class<?> ancestorType, int minDepth, int maxDepth) Requires an ancestor with the supplied functional identity and Model type within the given depth range.whereChild(Object collection, io.fluxzero.common.api.search.Constraint... constraints) Requires a directly related child document to match the supplied document constraints.whereDescendant(Object collection, int minDepth, int maxDepth, io.fluxzero.common.api.search.Constraint... constraints) Requires a descendant document within the supplied depth range to match the document constraints.whereDescendant(Object collection, io.fluxzero.common.api.search.Constraint... constraints) Requires a descendant document at any supported depth to match the supplied document constraints.whereParent(Graph<?> parent) Requires the supplied existing Model graph to be the direct parent.whereParent(Id<?> parentId) Requires a direct parent with the supplied typed identity.whereParent(Object collection, io.fluxzero.common.api.search.Constraint... constraints) Requires a directly related parent document to match the supplied document constraints.whereParent(Object parentId, Class<?> parentType) Requires a direct parent with the supplied functional identity and Model type.
-
Field Details
-
defaultFetchSize
static final int defaultFetchSizeThe default number of records to fetch in a single batch during search operations. Primarily used in streaming and batch-fetching methods to control the size of each data retrieval operation.A higher value increases the data fetch per operation, potentially reducing the number of retrievals but consuming more memory. A lower value minimizes memory usage but may require more network or database calls for large datasets.
- See Also:
-
-
Method Details
-
since
-
since
-
since
-
before
-
before
-
before
-
beforeLast
-
inLast
-
inPeriod
-
inPeriod
-
inPeriod
-
lookAhead
-
query
-
match
-
match
-
matchFacet
-
matchMetadata
-
anyExist
-
atLeast
-
below
-
between
-
all
-
any
-
not
-
constraint
-
whereParent
-
whereParent
Requires a direct parent with the supplied functional identity and Model type.Use this overload for identifiers that do not extend
Id. The Model type supplies any configured@EntityIdaffixes needed to resolve its exact persisted identity. -
whereParent
-
whereParent
-
whereAncestor
-
whereAncestor
-
whereAncestor
-
whereAncestor
-
whereAncestor
-
whereAncestor
-
whereAncestor
default Search<R> whereAncestor(Object ancestorId, Class<?> ancestorType, int minDepth, int maxDepth) Requires an ancestor with the supplied functional identity and Model type within the given depth range.The related Model itself is never loaded or searched. Models with parent-scoped primary identities cannot be resolved from a functional ID alone; use an exact persisted identity obtained from their
Graphinstead. -
whereAncestor
-
whereChild
-
whereDescendant
-
whereDescendant
-
relation
Adds advanced current-state model relationship constraints using logical AND.Class-based related queries use the model's actual current-document collection. This includes the private, type-isolated collection of a model that participates in graph composition without maintaining a direct public document. Related documents are selected before relationship traversal and target search, so a selective child constraint does not require live composition of unrelated roots. Constraints with exact related model IDs skip related-document selection and can therefore start from an event-sourced Model that has no current document.
Implementations that do not support independent-model graph search fail when this method is called.
-
sortByTimestamp
-
sortByTimestamp
-
sortByTimestamp
Sorts results by timestamp, with explicit null ordering. -
sortByScore
-
sortBy
-
sortBy
-
sortBy
Sorts results by a specific document field, with explicit null ordering. -
sortBy
Sorts results by a field, with control over both sort direction and null ordering. -
exclude
-
includeOnly
-
skip
-
fetch
-
fetchAsync
Asynchronously fetches up to the given number of matching documents and deserializes them to the stored type.This is the asynchronous counterpart of
fetch(int). The returned future completes with a materialized list containing at mostmaxSizeresults.- Parameters:
maxSize- the maximum number of matching documents to fetch- Returns:
- a future containing the deserialized search results
-
fetch
-
fetchAsync
Asynchronously fetches up to the given number of documents and deserializes them to the specified type.This is the asynchronous counterpart of
fetch(int, Class). Use this method when handling requests that can return aCompletableFuture; for very large result sets, prefer the streaming methods.- Type Parameters:
T- the expected result type- Parameters:
maxSize- the maximum number of matching documents to fetchtype- the type to deserialize each document to- Returns:
- a future containing the deserialized search results
-
fetchAll
-
fetchAll
-
fetchFirst
-
fetchFirst
-
fetchFirstOrNull
Fetches the first matching document if available and deserializes it to the stored type. Returns the deserialized value as an instance of typeR. -
fetchFirstOrNull
Fetches the first matching document if available and deserializes it to the specified type. -
stream
Streams matching values, deserializing each to the stored type. Documents will typically be fetched in batches from the backing store. For thedefault implementation, the fetch size is 10,000. -
stream
-
stream
Streams matching values, deserializing each to the specified type. Documents will typically be fetched in batches from the backing store. For thedefault implementation, the fetch size is 10,000. -
stream
-
toUtf8InputStream
default <T> InputStream toUtf8InputStream(Class<T> type, io.fluxzero.common.ThrowingFunction<T, String> mapper) Streams matching values of the specified type as a lazily populated UTF-8InputStream. -
toUtf8InputStream
default <T> InputStream toUtf8InputStream(Class<T> type, io.fluxzero.common.ThrowingFunction<T, String> mapper, int fetchSize) Streams matching values of the specified type as a lazily populated UTF-8InputStream, fetching documents in batches offetchSize. -
toInputStream
default <T> InputStream toInputStream(Class<T> type, io.fluxzero.common.ThrowingBiConsumer<T, OutputStream> writer) Streams matching values of the specified type as a lazily populatedInputStream. -
toInputStream
default <T> InputStream toInputStream(Class<T> type, io.fluxzero.common.ThrowingBiConsumer<T, OutputStream> writer, int fetchSize) Streams matching values of the specified type as a lazily populatedInputStream, fetching documents in batches offetchSize. -
toNdjsonInputStream
Streams matching values as NDJSON using the stored document types and the default fetch size. -
streamHits
Streams raw search hits (document + metadata). Documents will typically be fetched in batches from the backing store. For thedefault implementation, the fetch size is 10,000. -
streamHits
Streams raw search hits (document + metadata). Documents will be fetched in batches of sizefetchSizefrom the backing store. For thedefault implementation, the fetch size is 10,000. -
streamHits
Streams raw search hits (document + metadata). Documents will be fetched in batches of sizefetchSizefrom the backing store. For thedefault implementation, the fetch size is 10,000. -
streamHits
Streams raw search hits (document + metadata). Documents will be fetched in batches of sizefetchSizefrom the backing store. For thedefault implementation, the fetch size is 10,000. -
fetchHistogram
io.fluxzero.common.api.search.SearchHistogram fetchHistogram(int resolution, int maxSize) Computes a histogram for the timestamp distribution of matching documents. -
groupBy
Groups search results by field(s) and supports aggregations. -
count
Returns the number of matching documents. -
countAsync
Asynchronously returns the number of matching documents.This is the asynchronous counterpart of
count().- Returns:
- a future containing the matching document count
-
aggregate
-
aggregateAsync
default CompletableFuture<Map<String, io.fluxzero.common.api.search.DocumentStats.FieldStats>> aggregateAsync(String... fields) Asynchronously returns field statistics for one or more fields.This is the asynchronous counterpart of
aggregate(String...)and returns the statistics for the ungrouped result set.- Parameters:
fields- the fields to compute statistics for; omit fields to request the default count statistics- Returns:
- a future containing field statistics keyed by field name
-
facetStats
List<io.fluxzero.common.api.search.FacetStats> facetStats()Returns facet statistics for the current search. -
facetStatsAsync
CompletableFuture<List<io.fluxzero.common.api.search.FacetStats>> facetStatsAsync()Asynchronously returns facet statistics for the current search.This is the asynchronous counterpart of
facetStats().- Returns:
- a future containing facet value counts for the matching documents
-
delete
Deletes all matching documents in the current search.This is equivalent to calling
delete(0), which lets the runtime choose the batch size. -
delete
Deletes all matching documents in the current search, using the requested batch size to control how many documents are removed by each delete statement.The batch size does not limit the total number of documents that are deleted. For a positive batch size, the runtime repeatedly selects and deletes at most that many matching documents until no matches remain. This keeps individual statements and their locks shorter, at the cost of executing multiple statements.
0lets the runtime choose its default batch size;- a positive value sets the maximum number of documents processed per batch;
- a negative value requests deletion with one unbounded statement.
- Parameters:
batchSize- requested delete batch size- Returns:
- a future that completes when deletion has finished
-
move
Moves all matching documents in the current search to the given collection.- Parameters:
targetCollection- the collection to move to
-