/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.configuration;
import java.lang.annotation.ElementType;
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.de.GermanStemFilterFactory;
import org.apache.lucene.analysis.ngram.NGramFilterFactory;
import org.apache.lucene.analysis.snowball.SnowballPorterFilterFactory;
import org.apache.lucene.analysis.standard.StandardTokenizerFactory;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.FacetEncodingType;
import org.hibernate.search.annotations.Factory;
import org.hibernate.search.annotations.FilterCacheModeType;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.annotations.SpatialMode;
import org.hibernate.search.annotations.Store;
import org.hibernate.search.bridge.builtin.LongBridge;
import org.hibernate.search.cfg.ConcatStringBridge;
import org.hibernate.search.cfg.SearchMapping;
public class ProgrammaticSearchMappingFactory {
private static final String EN_ANALYZER_NAME = BlogEntry.EN_ANALYZER_NAME;
private static final String ENGLISH_ANALYZER_NAME =
"org_hibernate_search_test_configuration_ProgrammaticSearchMappingFactory" + "_english";
private static final String DEUTSCH_ANALYZER_NAME =
"org_hibernate_search_test_configuration_ProgrammaticSearchMappingFactory" + "_deutsch";
private static final String NGRAM_ANALYZER_NAME =
"org_hibernate_search_test_configuration_ProgrammaticSearchMappingFactory" + "_ngram";
@Factory
public SearchMapping build() {
SearchMapping mapping = new SearchMapping();
mapping.fullTextFilterDef( "security", SecurityFilterFactory.class ).cache( FilterCacheModeType.INSTANCE_ONLY )
.analyzerDef( NGRAM_ANALYZER_NAME, StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( NGramFilterFactory.class )
.param( "minGramSize", "3" )
.param( "maxGramSize", "3" )
.analyzerDef( ENGLISH_ANALYZER_NAME, StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( SnowballPorterFilterFactory.class )
.analyzerDef( DEUTSCH_ANALYZER_NAME, StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( GermanStemFilterFactory.class )
/*
* End of analyzer definitions that are duplicated in the elasticsearch.yml for test with Elasticsearch.
*/
.entity( Address.class )
.indexed()
.boost( 2 )
.classBridge( AddressClassBridge.class )
.analyzer( ENGLISH_ANALYZER_NAME )
.property( "addressId", ElementType.FIELD ).documentId().name( "id" )
.property( "lastUpdated", ElementType.FIELD )
.field().name( "last-updated" )
.analyzer( EN_ANALYZER_NAME ).store( Store.YES )
.calendarBridge( Resolution.DAY )
.property( "dateCreated", ElementType.FIELD )
.field().name( "date-created" ).index( Index.YES )
.store( Store.YES )
.dateBridge( Resolution.DAY )
.property( "owner", ElementType.FIELD )
.field()
.property( "street1", ElementType.FIELD )
.field()
.field().name( "street1_ngram" ).analyzer( NGRAM_ANALYZER_NAME )
.field()
.name( "street1_abridged" )
.bridge( ConcatStringBridge.class ).param( ConcatStringBridge.SIZE, "4" )
.property( "street2", ElementType.METHOD )
.field().name( "idx_street2" ).store( Store.YES ).boost( 2 )
.entity( ProvidedIdEntry.class ).indexed()
.providedId().name( "providedidentry.providedid" ).bridge( LongBridge.class )
.property( "name", ElementType.FIELD )
.field().name( "providedidentry.name" ).analyzer( EN_ANALYZER_NAME ).index( Index.YES ).store( Store.YES )
.property( "blurb", ElementType.FIELD )
.field().name( "providedidentry.blurb" ).analyzer( EN_ANALYZER_NAME ).index( Index.YES ).store( Store.YES )
.property( "age", ElementType.FIELD )
.field().name( "providedidentry.age" ).analyzer( EN_ANALYZER_NAME ).index( Index.YES ).store( Store.YES )
.entity( ProductCatalog.class ).indexed()
.boost( 2 )
.property( "id", ElementType.FIELD ).documentId().name( "id" )
.property( "name", ElementType.FIELD )
.field().name( "productCatalogName" ).index( Index.YES ).analyzer( EN_ANALYZER_NAME ).store( Store.YES )
.property( "items", ElementType.FIELD )
.indexEmbedded()
.includeEmbeddedObjectId( true )
.entity( Item.class )
.indexed()
.property( "id", ElementType.FIELD )
.documentId()
.sortableField()
.property( "description", ElementType.FIELD )
.field().name( "description" ).analyzer( EN_ANALYZER_NAME ).index( Index.YES ).store( Store.YES )
.property( "productCatalog", ElementType.FIELD )
.containedIn()
.property( "price", ElementType.FIELD )
.field()
.store( Store.YES )
.numericField().precisionStep( 10 )
.analyze( Analyze.NO )
.sortableField()
.facet()
.name( "price_facet" )
.encoding( FacetEncodingType.DOUBLE )
.field()
.name( "price_string" )
.store( Store.YES )
.entity( DynamicBoostedDescLibrary.class )
.dynamicBoost( CustomBoostStrategy.class )
.indexed()
.property( "libraryId", ElementType.FIELD )
.documentId().name( "id" )
.property( "name", ElementType.FIELD )
.dynamicBoost( CustomFieldBoostStrategy.class )
.field().store( Store.YES )
.entity( Departments.class )
.classBridge( CatDeptsFieldsClassBridge.class )
.name( "branchnetwork" )
.index( Index.YES )
.store( Store.YES )
.param( "sepChar", " " )
.classBridge( EquipmentType.class )
.name( "equiptype" )
.index( Index.YES )
.store( Store.YES )
.param( "C", "Cisco" )
.param( "D", "D-Link" )
.param( "K", "Kingston" )
.param( "3", "3Com" )
.indexed()
.property( "deptsId", ElementType.FIELD )
.documentId().name( "id" )
.property( "branchHead", ElementType.FIELD )
.field().store( Store.YES )
.property( "network", ElementType.FIELD )
.field().store( Store.YES )
.property( "branch", ElementType.FIELD )
.field().store( Store.YES )
.property( "maxEmployees", ElementType.FIELD )
.field().index( Index.YES ).analyze( Analyze.YES ).store( Store.YES )
.entity( BlogEntry.class ).indexed()
.property( "title", ElementType.METHOD )
.field()
.property( "description", ElementType.METHOD )
.field()
.property( "language", ElementType.METHOD )
.analyzerDiscriminator( BlogEntry.BlogLangDiscriminator.class )
.property( "dateCreated", ElementType.METHOD )
.field()
.name( "blog-entry-created" )
.store( Store.YES )
.dateBridge( Resolution.DAY )
.entity( MemberLevelTestPoI.class ).indexed()
.property( "name", ElementType.METHOD )
.field()
.property( "location", ElementType.METHOD )
.spatial().spatialMode( SpatialMode.HASH )
.entity( ClassLevelTestPoI.class ).indexed()
.spatial().name( "location" ).spatialMode( SpatialMode.HASH )
.property( "name", ElementType.METHOD )
.field()
.entity( LatLongAnnTestPoi.class ).indexed()
.spatial().name( "location" )
.property( "latitude", ElementType.FIELD )
.latitude().name( "location" )
.property( "longitude", ElementType.FIELD )
.longitude().name( "location" )
.entity( OrderLine.class ).indexed()
.classBridgeInstance( new OrderLineClassBridge( "orderLineName" ) )
.classBridgeInstance( new OrderLineClassBridge( null ) )
.name( "orderLineName_ngram" )
.analyzer( NGRAM_ANALYZER_NAME )
.classBridgeInstance( new OrderLineClassBridge( null ) )
.param( "fieldName", "orderLineNameViaParam" )
;
return mapping;
}
}