From cce869fa13264e954b15a9a0bac79d17d96e60a1 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 Add relative field names to the internal metadata Preliminary work for HSEARCH-2451. --- .../impl/AnnotationMetadataProvider.java | 29 +++++++++---------- .../metadata/impl/DocumentFieldMetadata.java | 17 ++++++++++- .../engine/metadata/impl/FacetMetadata.java | 15 +++++++++- .../spi/DocumentBuilderIndexedEntity.java | 2 +- .../test/bridge/builtin/TikaBridgeTest.java | 3 +- 5 files changed, 47 insertions(+), 19 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 8bd413206f0..84a6ee3cd68 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 @@ -275,7 +275,7 @@ private void createPropertyMetadataForEmbeddedId(XProperty member, TypeMetadata. new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, Store.YES, index, termVector + absoluteFieldName, relativeFieldName, Store.YES, index, termVector ) .boost( AnnotationProcessingHelper.getBoost( member, null ) ) .fieldBridge( fieldBridge ) @@ -359,7 +359,7 @@ private void createIdPropertyMetadata(XProperty member, DocumentFieldMetadata.Builder idMetadataBuilder = new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, + absoluteFieldName, relativeFieldName, Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS, termVector @@ -467,7 +467,7 @@ private void initializeProvidedIdMetadata(String prefix, ProvidedId providedId, new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, + absoluteFieldName, relativeFieldName, Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS, Field.TermVector.NO @@ -742,7 +742,7 @@ private void bindClassBridgeAnnotation(String prefix, new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), BackReference.empty(), // Class bridge, there's no related property - absoluteFieldName, store, index, termVector + absoluteFieldName, relativeFieldName, store, index, termVector ) .boost( classBridgeAnnotation.boost().value() ) .fieldBridge( fieldBridge ); @@ -793,7 +793,7 @@ private void bindSpatialAnnotation(Spatial spatialAnnotation, new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, store, index, termVector + absoluteFieldName, relativeFieldName, store, index, termVector ) .boost( AnnotationProcessingHelper.getBoost( member, spatialAnnotation ) ) .fieldBridge( fieldBridge ) @@ -840,7 +840,7 @@ private void bindSpatialAnnotation(Spatial spatialAnnotation, new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), BackReference.empty(), // Class-level spatial annotation, there's no related property - absoluteFieldName, store, index, termVector + absoluteFieldName, relativeFieldName, store, index, termVector ) .boost( spatialAnnotation.boost().value() ) .fieldBridge( spatialBridge ) @@ -1289,7 +1289,7 @@ private void bindFieldAnnotation( fieldMetadataBuilder = new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, + absoluteFieldName, relativeFieldName, store, Field.Index.NO.equals( index ) ? index : Field.Index.NOT_ANALYZED_NO_NORMS, termVector @@ -1305,7 +1305,7 @@ private void bindFieldAnnotation( fieldMetadataBuilder = new DocumentFieldMetadata.Builder( typeMetadataBuilder.getResultReference(), propertyMetadataBuilder.getResultReference(), - absoluteFieldName, + absoluteFieldName, relativeFieldName, store, index, termVector @@ -1323,14 +1323,13 @@ private void bindFieldAnnotation( throw log.attemptToFacetOnAnalyzedField( absoluteFieldName, member.getDeclaringClass().getName() ); } String relativeFacetFieldName = facetAnnotation.name(); - String absoluteFacetFieldName; - if ( facetAnnotation.name().isEmpty() ) { - absoluteFacetFieldName = absoluteFieldName; // if not explicitly set the facet name is the same as the field name + if ( relativeFacetFieldName.isEmpty() ) { + relativeFacetFieldName = relativeFieldName; // if not explicitly set the facet name is the same as the field name } - else { - absoluteFacetFieldName = prefix + relativeFacetFieldName; - } - FacetMetadata.Builder facetMetadataBuilder = new FacetMetadata.Builder( absoluteFacetFieldName ); + String absoluteFacetFieldName = prefix + relativeFacetFieldName; + FacetMetadata.Builder facetMetadataBuilder = new FacetMetadata.Builder( + absoluteFacetFieldName, relativeFacetFieldName + ); 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/DocumentFieldMetadata.java b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/DocumentFieldMetadata.java index 9a47cf9a330..9e00dd82e7a 100644 --- a/engine/src/main/java/org/hibernate/search/engine/metadata/impl/DocumentFieldMetadata.java +++ b/engine/src/main/java/org/hibernate/search/engine/metadata/impl/DocumentFieldMetadata.java @@ -33,6 +33,7 @@ public class DocumentFieldMetadata { private final BackReference sourceProperty; private final String absoluteName; + private final String relativeName; private final Store store; private final Field.Index index; private final Field.TermVector termVector; @@ -61,6 +62,7 @@ private DocumentFieldMetadata(Builder builder) { this.sourceProperty = builder.sourceProperty; this.absoluteName = builder.absoluteName; + this.relativeName = builder.relativeName; this.store = builder.store; this.index = builder.index; this.termVector = builder.termVector; @@ -102,6 +104,13 @@ public String getAbsoluteName() { return absoluteName; } + /** + * @return The name of this field excluding any indexed-embedded prefix. + */ + public String getRelativeName() { + return relativeName; + } + public boolean isId() { return isId; } @@ -196,6 +205,7 @@ public static class Builder { private final BackReference sourceType; private final BackReference sourceProperty; private final String absoluteName; + private final String relativeName; private final Store store; private final Field.Index index; private final Field.TermVector termVector; @@ -216,13 +226,14 @@ public static class Builder { public Builder(BackReference sourceType, BackReference sourceProperty, - String absoluteName, + String absoluteName, String relativeName, Store store, Field.Index index, Field.TermVector termVector) { this.sourceType = sourceType; this.sourceProperty = sourceProperty; this.absoluteName = absoluteName; + this.relativeName = relativeName; this.store = store; this.index = index; this.termVector = termVector; @@ -234,6 +245,10 @@ public String getAbsoluteName() { return absoluteName; } + public String getRelativeName() { + return relativeName; + } + public Builder fieldBridge(FieldBridge fieldBridge) { this.fieldBridge = fieldBridge; return this; 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 cbffc5a9234..8c8d3a36700 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 @@ -17,10 +17,13 @@ public class FacetMetadata { private final String absoluteName; + private final String relativeName; + private final FacetEncodingType encoding; private FacetMetadata(Builder builder) { this.absoluteName = builder.absoluteName; + this.relativeName = builder.relativeName; this.encoding = builder.encoding; } @@ -31,6 +34,13 @@ public String getAbsoluteName() { return absoluteName; } + /** + * @return The name of the facet field excluding any indexed-embedded prefix. + */ + public String getRelativeName() { + return relativeName; + } + public FacetEncodingType getEncoding() { return encoding; } @@ -38,12 +48,14 @@ public FacetEncodingType getEncoding() { public static class Builder { // required parameters private final String absoluteName; + private final String relativeName; // optional parameters private FacetEncodingType encoding = FacetEncodingType.AUTO; - public Builder(String absoluteName) { + public Builder(String absoluteName, String relativeName) { this.absoluteName = absoluteName; + this.relativeName = relativeName; } public void setFacetEncoding(FacetEncodingType encoding) { @@ -59,6 +71,7 @@ public FacetMetadata build() { public String toString() { return "FacetMetadata{" + "absoluteName='" + absoluteName + '\'' + + "relativeName='" + relativeName + '\'' + ", encoding=" + encoding + '}'; } diff --git a/engine/src/main/java/org/hibernate/search/engine/spi/DocumentBuilderIndexedEntity.java b/engine/src/main/java/org/hibernate/search/engine/spi/DocumentBuilderIndexedEntity.java index 02e883bd1c6..f8787aac797 100644 --- a/engine/src/main/java/org/hibernate/search/engine/spi/DocumentBuilderIndexedEntity.java +++ b/engine/src/main/java/org/hibernate/search/engine/spi/DocumentBuilderIndexedEntity.java @@ -102,7 +102,7 @@ public class DocumentBuilderIndexedEntity extends AbstractDocumentBuilder { new DocumentFieldMetadata.Builder( BackReference.empty(), BackReference.empty(), - null, + null, null, // No field name Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS, Field.TermVector.NO diff --git a/engine/src/test/java/org/hibernate/search/test/bridge/builtin/TikaBridgeTest.java b/engine/src/test/java/org/hibernate/search/test/bridge/builtin/TikaBridgeTest.java index 2c7469829c3..7920c09f8c4 100644 --- a/engine/src/test/java/org/hibernate/search/test/bridge/builtin/TikaBridgeTest.java +++ b/engine/src/test/java/org/hibernate/search/test/bridge/builtin/TikaBridgeTest.java @@ -55,7 +55,8 @@ public void setUp() { new DocumentFieldMetadata.Builder( new BackReference(), new BackReference(), - null, Store.YES, Field.Index.ANALYZED, Field.TermVector.NO + null, null, // No field name + Store.YES, Field.Index.ANALYZED, Field.TermVector.NO ) .boost( 0F ) .build();