private Map<String, FieldDescriptor> createAllFieldDescriptors() { Map<String, FieldDescriptor> fieldDescriptorMap = new HashMap<String, FieldDescriptor>(); for ( FieldDescriptor fieldDescriptor : classBridgeFieldDescriptors ) { fieldDescriptorMap.put( fieldDescriptor.getName(), fieldDescriptor ); } for ( PropertyDescriptor propertyDescriptor : propertyDescriptors ) { for ( FieldDescriptor fieldDescriptor : propertyDescriptor.getIndexedFields() ) { fieldDescriptorMap.put( fieldDescriptor.getName(), fieldDescriptor ); } } return fieldDescriptorMap; }
private Map<String, FieldDescriptor> createAllFieldDescriptors() { Map<String, FieldDescriptor> fieldDescriptorMap = new HashMap<String, FieldDescriptor>(); for ( FieldDescriptor fieldDescriptor : classBridgeFieldDescriptors ) { fieldDescriptorMap.put( fieldDescriptor.getName(), fieldDescriptor ); } for ( PropertyDescriptor propertyDescriptor : propertyDescriptors ) { for ( FieldDescriptor fieldDescriptor : propertyDescriptor.getIndexedFields() ) { fieldDescriptorMap.put( fieldDescriptor.getName(), fieldDescriptor ); } } return fieldDescriptorMap; }
private void putInFieldTypeBucket(Set<String> stringEncodedFieldNames, Set<String> numericEncodedFieldNames, FieldDescriptor fieldDescriptor) { if ( FieldDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ) { // If the property allows to index a string based null token, a non numeric query is ok // We are currently skipping this case completely from the validation. In a full on implementation we would // need to take term values into account and in the case of a string query only allow the null token. // For now we cast a net which is potentially too wide (HF) if ( !fieldDescriptor.indexNull() ) { numericEncodedFieldNames.add( fieldDescriptor.getName() ); } } else { stringEncodedFieldNames.add( fieldDescriptor.getName() ); } }
private void putInFieldTypeBucket(Set<String> stringEncodedFieldNames, Set<String> numericEncodedFieldNames, FieldDescriptor fieldDescriptor) { if ( FieldDescriptor.Type.NUMERIC.equals( fieldDescriptor.getType() ) ) { // If the property allows to index a string based null token, a non numeric query is ok // We are currently skipping this case completely from the validation. In a full on implementation we would // need to take term values into account and in the case of a string query only allow the null token. // For now we cast a net which is potentially too wide (HF) if ( !fieldDescriptor.indexNull() ) { numericEncodedFieldNames.add( fieldDescriptor.getName() ); } } else { stringEncodedFieldNames.add( fieldDescriptor.getName() ); } }
@Test @TestForIssue(jiraKey = "HSEARCH-1987") public void testSomeOfSeveralFieldsAreNumeric() { Set<FieldDescriptor> fields = sfHolder.getSearchFactory() .getIndexedTypeDescriptor( new PojoIndexedTypeIdentifier( TouristAttraction.class ) ) .getProperty( "rating" ) .getIndexedFields(); assertThat( fields ).extracting( "name" ) .containsExactlyInAnyOrder( "rating", "ratingNumericPrecision1", "ratingNumericPrecision2" ); for ( FieldDescriptor field : fields ) { if ( "ratingNumericPrecision1".equals( field.getName() ) ) { assertThat( field.getType() ).isEqualTo( Type.NUMERIC ); assertThat( field.as( NumericFieldSettingsDescriptor.class ).precisionStep() ).isEqualTo( 1 ); } else if ( "ratingNumericPrecision2".equals( field.getName() ) ) { assertThat( field.getType() ).isEqualTo( Type.NUMERIC ); assertThat( field.as( NumericFieldSettingsDescriptor.class ).precisionStep() ).isEqualTo( 2 ); } else { assertThat( field.getType() ).isEqualTo( Type.BASIC ); } } }
@Test public void testFieldDescriptorLuceneOptions() { String fieldName = "my-snafu"; FieldDescriptor fieldDescriptor = getFieldDescriptor( Snafu.class, fieldName ); assertEquals( "Wrong field name", fieldName, fieldDescriptor.getName() ); assertEquals( Index.NO, fieldDescriptor.getIndex() ); assertEquals( Analyze.NO, fieldDescriptor.getAnalyze() ); assertEquals( Store.YES, fieldDescriptor.getStore() ); assertEquals( Norms.NO, fieldDescriptor.getNorms() ); assertEquals( TermVector.WITH_POSITIONS, fieldDescriptor.getTermVector() ); assertEquals( 10.0f, fieldDescriptor.getBoost(), 0 ); assertFalse( fieldDescriptor.indexNull() ); assertNull( fieldDescriptor.indexNullAs() ); assertTrue( FieldSettingsDescriptor.Type.BASIC.equals( fieldDescriptor.getType() ) ); }