From 862bacea2ac26f3995f978f25ec814354f42d6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Tue, 8 Nov 2016 15:10:18 +0100 Subject: [PATCH] HSEARCH-2451 Added the "source" field to FacetMetadata Preliminary work for HSEARCH-2451. --- .../impl/AnnotationMetadataProvider.java | 4 +++- .../engine/metadata/impl/FacetMetadata.java | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/AnnotationMetadataProvider.java b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/AnnotationMetadataProvider.java index 2889b38e228..a9eca76c7fd 100644 --- a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/AnnotationMetadataProvider.java +++ b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/AnnotationMetadataProvider.java @@ -1327,7 +1327,9 @@ private void bindFieldAnnotation( relativeFacetFieldName = relativeFieldName; // if not explicitly set the facet name is the same as the field name } DocumentFieldPath facetFieldPath = new DocumentFieldPath( prefix, relativeFacetFieldName ); - FacetMetadata.Builder facetMetadataBuilder = new FacetMetadata.Builder( facetFieldPath ); + FacetMetadata.Builder facetMetadataBuilder = new FacetMetadata.Builder( + fieldMetadataBuilder.getResultReference(), facetFieldPath + ); FacetEncodingType facetEncodingType = determineFacetEncodingType( member, facetAnnotation ); facetMetadataBuilder.setFacetEncoding( facetEncodingType ); fieldMetadataBuilder.addFacetMetadata( facetMetadataBuilder.build() ); diff --git a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/FacetMetadata.java b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/FacetMetadata.java index 8c0738c3ba6..4b3d504c6ab 100644 --- a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/FacetMetadata.java +++ b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/FacetMetadata.java @@ -15,15 +15,25 @@ */ public class FacetMetadata { + private final BackReference sourceField; + private final DocumentFieldPath path; private final FacetEncodingType encoding; private FacetMetadata(Builder builder) { + this.sourceField = builder.sourceField; this.path = builder.path; this.encoding = builder.encoding; } + /** + * @return The {@link DocumentFieldMetadata} to which the facet applies. + */ + public DocumentFieldMetadata getSourceField() { + return sourceField.get(); + } + /** * @return The full name of the facet field, including any indexed-embedded prefix. Equivalent to {@code #getPath().getAbsoluteName()}. */ @@ -44,12 +54,15 @@ public FacetEncodingType getEncoding() { public static class Builder { // required parameters + private final BackReference sourceField; private final DocumentFieldPath path; // optional parameters private FacetEncodingType encoding = FacetEncodingType.AUTO; - public Builder(DocumentFieldPath path) { + public Builder(BackReference sourceField, + DocumentFieldPath path) { + this.sourceField = sourceField; this.path = path; } @@ -65,6 +78,7 @@ public FacetMetadata build() { @Override public String toString() { return "FacetMetadata{" + + "sourceField='" + sourceField + '\'' + "path='" + path + '\'' + ", encoding=" + encoding + '}';