Skip to content

Commit

Permalink
HSEARCH-3193 Support descending order in distance sort with Lucene
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever authored and yrodiere committed Oct 2, 2019
1 parent 126e47f commit c347218
Show file tree
Hide file tree
Showing 6 changed files with 4 additions and 174 deletions.
Expand Up @@ -316,10 +316,6 @@ SearchException indexSchemaNodeNameConflict(String relativeFieldName,
value = "Traditional sorting operations are not supported by the GeoPoint field type, use distance sorting instead.")
SearchException traditionalSortNotSupportedByGeoPoint(@Param EventContext context);

@Message(id = ID_OFFSET_2 + 43,
value = "Descending order is not supported for distance sort.")
SearchException descendingOrderNotSupportedByDistanceSort(@Param EventContext context);

@Message(id = ID_OFFSET_2 + 44,
value = "Computed minimum for minimumShouldMatch constraint is out of bounds:"
+ " expected a number between '1' and '%1$s', got '%2$s'.")
Expand Down
Expand Up @@ -6,26 +6,19 @@
*/
package org.hibernate.search.backend.lucene.types.sort.impl;

import java.lang.invoke.MethodHandles;

import org.apache.lucene.search.SortField;

import org.hibernate.search.backend.lucene.logging.impl.Log;
import org.hibernate.search.backend.lucene.search.sort.impl.AbstractLuceneSearchSortBuilder;
import org.hibernate.search.backend.lucene.search.sort.impl.LuceneSearchSortBuilder;
import org.hibernate.search.backend.lucene.search.sort.impl.LuceneSearchSortCollector;
import org.hibernate.search.backend.lucene.types.sort.comparatorsource.impl.LuceneGeoPointDistanceComparatorSource;
import org.hibernate.search.engine.reporting.spi.EventContexts;
import org.hibernate.search.engine.search.sort.dsl.SortOrder;
import org.hibernate.search.engine.search.sort.spi.DistanceSortBuilder;
import org.hibernate.search.engine.spatial.GeoPoint;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

import org.apache.lucene.search.SortField;

public class LuceneGeoPointDistanceSortBuilder extends AbstractLuceneSearchSortBuilder
implements DistanceSortBuilder<LuceneSearchSortBuilder> {

private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() );

private final String absoluteFieldPath;
private final String nestedDocumentPath;
private final GeoPoint location;
Expand All @@ -36,16 +29,6 @@ public class LuceneGeoPointDistanceSortBuilder extends AbstractLuceneSearchSortB
this.location = location;
}

@Override
public void order(SortOrder order) {
// TODO HSEARCH-3193 contribute the support of descending order to Lucene
if ( SortOrder.DESC == order ) {
throw log.descendingOrderNotSupportedByDistanceSort(
EventContexts.fromIndexFieldAbsolutePath( absoluteFieldPath )
);
}
}

@Override
public void buildAndContribute(LuceneSearchSortCollector collector) {
LuceneGeoPointDistanceComparatorSource fieldComparatorSource = new LuceneGeoPointDistanceComparatorSource(
Expand Down

This file was deleted.

Expand Up @@ -10,13 +10,6 @@

class LuceneTckBackendFeatures extends TckBackendFeatures {

@Override
public boolean distanceSortDesc() {
// we don't test the descending order here as it's currently not supported by Lucene
// see LuceneSearchSortIT
return false;
}

@Override
public boolean aggregationsOnMultiValuedFields(Class<?> fieldType) {
// TODO HSEARCH-1929 + HSEARCH-1927 Aggregations on multi-valued numeric fields are not supported at the moment
Expand Down
Expand Up @@ -13,6 +13,7 @@
import java.util.Optional;
import java.util.function.Function;

import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.backend.document.DocumentElement;
import org.hibernate.search.engine.backend.document.IndexFieldReference;
import org.hibernate.search.engine.backend.document.IndexObjectFieldReference;
Expand All @@ -21,27 +22,24 @@
import org.hibernate.search.engine.backend.document.model.dsl.ObjectFieldStorage;
import org.hibernate.search.engine.backend.types.Sortable;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.search.predicate.SearchPredicate;
import org.hibernate.search.engine.search.sort.dsl.SortFinalStep;
import org.hibernate.search.engine.search.query.SearchQuery;
import org.hibernate.search.engine.search.query.SearchResult;
import org.hibernate.search.engine.search.sort.SearchSort;
import org.hibernate.search.engine.search.sort.dsl.SearchSortFactory;
import org.hibernate.search.engine.search.sort.dsl.SearchSortFactoryExtension;
import org.hibernate.search.engine.search.sort.dsl.SortFinalStep;
import org.hibernate.search.engine.search.sort.dsl.spi.DelegatingSearchSortFactory;
import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext;
import org.hibernate.search.engine.spatial.GeoPoint;
import org.hibernate.search.integrationtest.backend.tck.testsupport.configuration.DefaultAnalysisDefinitions;
import org.hibernate.search.integrationtest.backend.tck.testsupport.util.TckConfiguration;
import org.hibernate.search.integrationtest.backend.tck.testsupport.util.rule.SearchSetupHelper;
import org.hibernate.search.util.common.SearchException;
import org.hibernate.search.util.impl.integrationtest.common.stub.mapper.StubMappingIndexManager;
import org.hibernate.search.util.impl.integrationtest.common.stub.mapper.StubMappingScope;
import org.hibernate.search.util.impl.test.SubTest;
import org.hibernate.search.util.impl.test.annotation.TestForIssue;

import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
Expand Down Expand Up @@ -369,11 +367,6 @@ public void byDistance_asc() {

@Test
public void byDistance_desc() {
Assume.assumeTrue(
"Descending distance sort is not supported, skipping.",
TckConfiguration.get().getBackendFeatures().distanceSortDesc()
);

SearchQuery<DocumentReference> query = simpleQuery(
b -> b.distance( "geoPoint", GeoPoint.of( 45.757864, 4.834496 ) ).desc()
);
Expand Down Expand Up @@ -413,11 +406,6 @@ public void byDistance_asc_flattened() {

@Test
public void byDistance_desc_flattened() {
Assume.assumeTrue(
"Descending distance sort is not supported, skipping.",
TckConfiguration.get().getBackendFeatures().distanceSortDesc()
);

SearchQuery<DocumentReference> query = simpleQuery(
b -> b.distance( "flattenedObject.geoPoint", GeoPoint.of( 45.757864, 4.834496 ) ).desc()
);
Expand Down Expand Up @@ -446,11 +434,6 @@ public void byDistance_asc_nested() {

@Test
public void byDistance_desc_nested() {
Assume.assumeTrue(
"Descending distance sort is not supported, skipping.",
TckConfiguration.get().getBackendFeatures().distanceSortDesc()
);

SearchQuery<DocumentReference> query = simpleQuery(
b -> b.distance( "nestedObject.geoPoint", GeoPoint.of( 45.757864, 4.834496 ) ).desc()
);
Expand Down Expand Up @@ -479,11 +462,6 @@ public void byDistance_asc_nested_x2() {

@Test
public void byDistance_desc_nested_x2() {
Assume.assumeTrue(
"Descending distance sort is not supported, skipping.",
TckConfiguration.get().getBackendFeatures().distanceSortDesc()
);

SearchQuery<DocumentReference> query = simpleQuery(
b -> b.distance( "nestedObject.nestedObject.geoPoint", GeoPoint.of( 45.757864, 4.834496 ) ).desc()
);
Expand Down
Expand Up @@ -8,10 +8,6 @@

public class TckBackendFeatures {

public boolean distanceSortDesc() {
return true;
}

public boolean geoPointIndexNullAs() {
return true;
}
Expand Down

0 comments on commit c347218

Please sign in to comment.