use of org.hibernate.search.engine.backend.types.Sortable in project hibernate-search by hibernate.
the class DistanceSearchSearchableSortableIT method searchableNotSortable.
@Test
public void searchableNotSortable() {
StubMappingScope scope = index.createScope();
String fieldPath = "searchableNotSortable";
assertThatThrownBy(() -> scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).sort(f -> f.distance(fieldPath, METRO_GARIBALDI)).toQuery()).isInstanceOf(SearchException.class).hasMessageContainingAll("Cannot use 'sort:distance' on field '" + fieldPath + "'", "Make sure the field is marked as searchable/sortable/projectable/aggregable (whichever is relevant)");
SearchQuery<DocumentReference> query = scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).toQuery();
assertThatQuery(query).hasDocRefHitsAnyOrder(index.typeName(), CHEZ_MARGOTTE_ID, IMOUTO_ID);
}
use of org.hibernate.search.engine.backend.types.Sortable in project hibernate-search by hibernate.
the class FullNameBinder method bind.
@Override
public void bind(TypeBindingContext context) {
context.dependencies().use("firstName").use("lastName");
IndexFieldReference<String> fullNameField = context.indexSchemaElement().field("fullName", f -> f.asString().analyzer("name")).toReference();
IndexFieldReference<String> fullNameSortField = null;
if (this.sortField) {
// <2>
fullNameSortField = context.indexSchemaElement().field("fullName_sort", f -> f.asString().normalizer("name").sortable(Sortable.YES)).toReference();
}
context.bridge(Author.class, new Bridge(fullNameField, fullNameSortField));
}
use of org.hibernate.search.engine.backend.types.Sortable in project hibernate-search by hibernate.
the class DistanceSearchableSortableIT method searchableNotSortable.
@Test
public void searchableNotSortable() {
assumeFalse("Skipping test for ES GeoPoint as those would become sortable by default in this case.", TckConfiguration.get().getBackendFeatures().fieldsProjectableByDefault());
StubMappingScope scope = index.createScope();
String fieldPath = "searchableNotSortable";
assertThatThrownBy(() -> scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).sort(f -> f.distance(fieldPath, METRO_GARIBALDI)).toQuery()).isInstanceOf(SearchException.class).hasMessageContainingAll("Cannot use 'sort:distance' on field '" + fieldPath + "'", "Make sure the field is marked as searchable/sortable/projectable/aggregable (whichever is relevant)");
SearchQuery<DocumentReference> query = scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).toQuery();
assertThatQuery(query).hasDocRefHitsAnyOrder(index.typeName(), CHEZ_MARGOTTE_ID, IMOUTO_ID);
}
use of org.hibernate.search.engine.backend.types.Sortable in project hibernate-search by hibernate.
the class DistanceSearchableSortableIT method searchableDefaultSortable.
@Test
public void searchableDefaultSortable() {
assumeFalse("Skipping test for ES GeoPoint as those would become sortable by default in this case.", TckConfiguration.get().getBackendFeatures().fieldsProjectableByDefault());
StubMappingScope scope = index.createScope();
String fieldPath = "searchableDefaultSortable";
assertThatThrownBy(() -> scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).sort(f -> f.distance(fieldPath, METRO_GARIBALDI)).toQuery()).isInstanceOf(SearchException.class).hasMessageContainingAll("Cannot use 'sort:distance' on field '" + fieldPath + "'", "Make sure the field is marked as searchable/sortable/projectable/aggregable (whichever is relevant)");
SearchQuery<DocumentReference> query = scope.query().where(f -> f.spatial().within().field(fieldPath).circle(METRO_GARIBALDI, 1_500)).toQuery();
assertThatQuery(query).hasDocRefHitsAnyOrder(index.typeName(), CHEZ_MARGOTTE_ID, IMOUTO_ID);
}
use of org.hibernate.search.engine.backend.types.Sortable in project hibernate-search by hibernate.
the class ProgrammaticMappingGeoPointBindingIT method setup.
@Before
public void setup() {
backendMock.expectSchema(GeoPointOnTypeEntity.INDEX, b -> b.field("homeLocation", GeoPoint.class, b2 -> b2.projectable(Projectable.YES).sortable(Sortable.YES)).field("workLocation", GeoPoint.class, b2 -> b2.projectable(Projectable.DEFAULT).sortable(Sortable.DEFAULT)));
backendMock.expectSchema(GeoPointOnCoordinatesPropertyEntity.INDEX, b -> b.field("coord", GeoPoint.class).field("location", GeoPoint.class, b2 -> b2.projectable(Projectable.NO)));
backendMock.expectSchema(GeoPointOnCustomCoordinatesPropertyEntity.INDEX, b -> b.field("coord", GeoPoint.class, b2 -> b2.projectable(Projectable.DEFAULT).sortable(Sortable.DEFAULT)).field("location", GeoPoint.class, b2 -> b2.projectable(Projectable.DEFAULT).sortable(Sortable.DEFAULT)));
mapping = setupHelper.start().withConfiguration(builder -> {
builder.addEntityTypes(CollectionHelper.asSet(GeoPointOnTypeEntity.class, GeoPointOnCoordinatesPropertyEntity.class, GeoPointOnCustomCoordinatesPropertyEntity.class));
ProgrammaticMappingConfigurationContext mappingDefinition = builder.programmaticMapping();
TypeMappingStep geoPointOntTypeEntityMapping = mappingDefinition.type(GeoPointOnTypeEntity.class);
geoPointOntTypeEntityMapping.indexed().index(GeoPointOnTypeEntity.INDEX);
geoPointOntTypeEntityMapping.binder(GeoPointBinder.create().fieldName("homeLocation").markerSet("home").projectable(Projectable.YES).sortable(Sortable.YES));
geoPointOntTypeEntityMapping.binder(GeoPointBinder.create().fieldName("workLocation").markerSet("work"));
geoPointOntTypeEntityMapping.property("id").documentId();
geoPointOntTypeEntityMapping.property("homeLatitude").marker(GeoPointBinder.latitude().markerSet("home"));
geoPointOntTypeEntityMapping.property("homeLongitude").marker(GeoPointBinder.longitude().markerSet("home"));
geoPointOntTypeEntityMapping.property("workLatitude").marker(GeoPointBinder.latitude().markerSet("work"));
geoPointOntTypeEntityMapping.property("workLongitude").marker(GeoPointBinder.longitude().markerSet("work"));
TypeMappingStep geoPointOnCoordinatesPropertyEntityMapping = mappingDefinition.type(GeoPointOnCoordinatesPropertyEntity.class);
geoPointOnCoordinatesPropertyEntityMapping.indexed().index(GeoPointOnCoordinatesPropertyEntity.INDEX);
geoPointOnCoordinatesPropertyEntityMapping.property("id").documentId();
geoPointOnCoordinatesPropertyEntityMapping.property("coord").genericField().genericField("location").projectable(Projectable.NO);
TypeMappingStep geoPointOnCustomCoordinatesPropertyEntityMapping = mappingDefinition.type(GeoPointOnCustomCoordinatesPropertyEntity.class);
geoPointOnCustomCoordinatesPropertyEntityMapping.indexed().index(GeoPointOnCustomCoordinatesPropertyEntity.INDEX);
geoPointOnCustomCoordinatesPropertyEntityMapping.property("id").documentId();
geoPointOnCustomCoordinatesPropertyEntityMapping.property("coord").binder(GeoPointBinder.create()).binder(GeoPointBinder.create().fieldName("location"));
TypeMappingStep customCoordinatesMapping = mappingDefinition.type(CustomCoordinates.class);
customCoordinatesMapping.property("lat").marker(GeoPointBinder.latitude());
customCoordinatesMapping.property("lon").marker(GeoPointBinder.longitude());
}).setup();
backendMock.verifyExpectationsMet();
}
Aggregations