From fe2fa3715a92e096f3f1e09536d077e65aa47f77 Mon Sep 17 00:00:00 2001 From: Fabio Massimo Ercoli Date: Fri, 5 Feb 2021 17:44:43 +0100 Subject: [PATCH] HSEARCH-3863 Add missing option to DistanceSortOptionsStep --- .../DistanceSortMissingValueBehaviorStep.java | 48 +++++++++++++++++++ .../sort/dsl/DistanceSortOptionsStep.java | 8 ++++ .../dsl/impl/DistanceSortOptionsStepImpl.java | 28 ++++++++++- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortMissingValueBehaviorStep.java diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortMissingValueBehaviorStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortMissingValueBehaviorStep.java new file mode 100644 index 00000000000..73e7f2ed750 --- /dev/null +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortMissingValueBehaviorStep.java @@ -0,0 +1,48 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.engine.search.sort.dsl; + +import org.hibernate.search.engine.spatial.GeoPoint; + +/** + * The step in a sort definition where the behavior on missing values can be set. + * + * @param The type of the next step (returned by {@link DistanceSortMissingValueBehaviorStep#first()}, for example). + * + * @author Emmanuel Bernard emmanuel@hibernate.org + */ +public interface DistanceSortMissingValueBehaviorStep { + + /** + * Put documents with missing values last in the sorting. + * + *

This instruction is independent of whether the sort is being ascending + * or descending. + * + * @return The next step. + */ + N last(); + + /** + * Put documents with missing values first in the sorting. + * + *

This instruction is independent of whether the sort is being ascending + * or descending. + * + * @return The next step. + */ + N first(); + + /** + * When documents are missing a value on the sort field, use the given value instead. + * + * @param value The value to use as a default when a document is missing a value on the sort field. + * @return The next step. + */ + N use(GeoPoint value); + +} diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java index 202cdb3b107..3373ae5b549 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/DistanceSortOptionsStep.java @@ -19,4 +19,12 @@ public interface DistanceSortOptionsStep, PDF extends SearchPredicateFactory> extends SortFinalStep, SortThenStep, SortOrderStep, SortModeStep, SortFilterStep { + /** + * Start describing the behavior of this sort when a document doesn't + * have any value for the targeted field. + * + * @return The next step. + */ + DistanceSortMissingValueBehaviorStep missing(); + } diff --git a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java index a32c5134355..a7ece3ba9d4 100644 --- a/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java +++ b/engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/DistanceSortOptionsStepImpl.java @@ -13,6 +13,7 @@ import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep; import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory; import org.hibernate.search.engine.search.sort.SearchSort; +import org.hibernate.search.engine.search.sort.dsl.DistanceSortMissingValueBehaviorStep; import org.hibernate.search.engine.search.sort.dsl.DistanceSortOptionsStep; import org.hibernate.search.engine.search.sort.dsl.SortOrder; import org.hibernate.search.engine.search.sort.dsl.spi.AbstractSortThenStep; @@ -22,7 +23,8 @@ public class DistanceSortOptionsStepImpl extends AbstractSortThenStep - implements DistanceSortOptionsStep, PDF> { + implements DistanceSortOptionsStep, PDF>, + DistanceSortMissingValueBehaviorStep> { private final DistanceSortBuilder builder; private final SearchSortDslContext dslContext; @@ -61,6 +63,30 @@ public DistanceSortOptionsStepImpl filter(SearchPredicate searchPredicate) return this; } + + @Override + public DistanceSortMissingValueBehaviorStep> missing() { + return this; + } + + @Override + public DistanceSortOptionsStepImpl first() { + // TODO HSEARCH-3863 builder.missingFirst(); + return this; + } + + @Override + public DistanceSortOptionsStepImpl last() { + // TODO HSEARCH-3863 builder.missingLast(); + return this; + } + + @Override + public DistanceSortOptionsStepImpl use(GeoPoint value) { + // TODO HSEARCH-3863 builder.missingAs( value ); + return this; + } + @Override protected SearchSort build() { return builder.build();