[hibernate-commits] Hibernate SVN: r18078 - in search/trunk/src: main/java/org/hibernate/search/cfg and 2 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Fri Nov 27 12:30:32 EST 2009
Author: epbernard
Date: 2009-11-27 12:30:32 -0500 (Fri, 27 Nov 2009)
New Revision: 18078
Modified:
search/trunk/src/main/docbook/en-US/modules/mapping.xml
search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java
search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMapping.java
search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java
search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.java
search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java
search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMapping.java
search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetadataProvider.java
search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java
search/trunk/src/test/java/org/hibernate/search/test/configuration/ProgrammaticMappingTest.java
Log:
HSEARCH-411 fix various issues on programmatic API
Modified: search/trunk/src/main/docbook/en-US/modules/mapping.xml
===================================================================
--- search/trunk/src/main/docbook/en-US/modules/mapping.xml 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/docbook/en-US/modules/mapping.xml 2009-11-27 17:30:32 UTC (rev 18078)
@@ -1548,7 +1548,7 @@
<classname>SearchMapping</classname> object. This object is passed to
Hibernate Search via a property set to the <classname>Configuration
</classname>object. The property key is
- <literal>hibernate.search.mapping_model</literal>. </para>
+ <literal>hibernate.search.mapping_model</literal>.</para>
<programlisting>SearchMapping mapping = new SearchMapping();
[...]
@@ -1736,18 +1736,19 @@
</section>
<section>
- <title>Defining fields for indexing</title>
+ <title>Defining full text filter definitions</title>
- <para>When defining fields for indexing using the programmatic API, call
- <methodname>field()</methodname> on the <methodname>property(String
- propertyName, ElementType elementType)</methodname> method. From
- <methodname>field()</methodname> you can specify the <methodname>name,
- index</methodname>, <methodname>store</methodname>,
- <methodname>bridge</methodname> and <methodname>analyzer</methodname>
- definitions.</para>
+ <para>The programmatic API provides easy mechanism for defining full
+ text filter definitions which is available via
+ <classname>@FullTextFilterDef</classname> and
+ <classname>@FullTextFilterDefs</classname>. Note that contrary to the
+ annotation equivalent, full text filter definitions are a global
+ construct and are not tied to an entity. The next example depicts the
+ creation of full text filter definition using the
+ <methodname>fullTextFilterDef </methodname>method.</para>
<para><example>
- <title>Indexing fields using programmatic API</title>
+ <title>Defining full text definition programmatically</title>
<programlisting>SearchMapping mapping = new SearchMapping();
@@ -1755,26 +1756,30 @@
.analyzerDef( "en", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( EnglishPorterFilterFactory.class )
- .entity(Address.class).indexed()
+ <emphasis role="bold">.fullTextFilterDef("security", SecurityFilterFactory.class)
+ .cache(FilterCacheModeType.INSTANCE_ONLY)</emphasis>
+ .entity(Address.class)
+ .indexed()
.property("addressId", ElementType.METHOD)
.documentId()
.name("id")
.property("street1", ElementType.METHOD)
- <emphasis role="bold">.field()
+ .field()
.analyzer("en")
.store(Store.YES)
- .index(Index.TOKENIZED) //no useful here as it's the default
.field()
.name("address_data")
- .analyzer("en");</emphasis>
+ .analyzer("en")
+ .store(Store.NO);
cfg.getProperties().put( "hibernate.search.mapping_model", mapping );</programlisting>
- <para>The above example of marking fields as indexable is equivalent
- to defining fields using <classname>@Field</classname> as seen
+ <para>The previous example can effectively been seen as annotating
+ your entity with <classname>@FullTextFilterDef</classname> like
below:</para>
</example><example>
- <title>Indexing fields using annotation</title>
+ <title>Using annotation to define full text filter
+ definition</title>
<programlisting>@Entity
@Indexed
@@ -1786,39 +1791,42 @@
@TokenFilterDef(factory = EnglishPorterFilterFactory.class)
})
})
+ at FullTextFilterDefs({
+ @FullTextFilterDef(name = "security", impl = SecurityFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY)
+})
public class Address {
@Id
@GeneratedValue
@DocumentId(name="id")
- private Long getAddressId() {...};
+ pubblic Long getAddressId() {...};
@Fields({
@Field(index=Index.TOKENIZED, store=Store.YES,
analyzer=@Analyzer(definition="en")),
@Field(name="address_data", analyzer=@Analyzer(definition="en"))
})
- public String getAddress1() {...}
+ public String getAddress1() {...};
......
+
}</programlisting>
-
- <para></para>
</example></para>
</section>
<section>
- <title>Defining full text filter definitions</title>
+ <title>Defining fields for indexing</title>
- <para>The programmatic API provides easy mechanism for defining full
- text filter definitions which is available via
- <classname>@FullTextFilterDef</classname> and
- <classname>@FullTextFilterDefs</classname>. The next example depicts the
- creation of full text filter definition using the
- <methodname>fullTextFilterDef </methodname>method.</para>
+ <para>When defining fields for indexing using the programmatic API, call
+ <methodname>field()</methodname> on the <methodname>property(String
+ propertyName, ElementType elementType)</methodname> method. From
+ <methodname>field()</methodname> you can specify the <methodname>name,
+ index</methodname>, <methodname>store</methodname>,
+ <methodname>bridge</methodname> and <methodname>analyzer</methodname>
+ definitions.</para>
<para><example>
- <title>Defining full text definition programmatically</title>
+ <title>Indexing fields using programmatic API</title>
<programlisting>SearchMapping mapping = new SearchMapping();
@@ -1826,29 +1834,26 @@
.analyzerDef( "en", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( EnglishPorterFilterFactory.class )
- .entity(Address.class)
- .indexed()
- <emphasis role="bold">.fullTextFilterDef("security", SecurityFilterFactory.class)
- .cache(FilterCacheModeType.INSTANCE_ONLY)</emphasis>
+ .entity(Address.class).indexed()
.property("addressId", ElementType.METHOD)
.documentId()
.name("id")
.property("street1", ElementType.METHOD)
- .field()
+ <emphasis role="bold">.field()
.analyzer("en")
.store(Store.YES)
+ .index(Index.TOKENIZED) //no useful here as it's the default
.field()
.name("address_data")
- .analyzer("en")
- .store(Store.NO);
+ .analyzer("en");</emphasis>
cfg.getProperties().put( "hibernate.search.mapping_model", mapping );</programlisting>
- <para>The previous example can effectively been seen as annotating
- your entity with @FullTextFilterDef like below:</para>
+ <para>The above example of marking fields as indexable is equivalent
+ to defining fields using <classname>@Field</classname> as seen
+ below:</para>
</example><example>
- <title>Using annotation to define full text filter
- definition</title>
+ <title>Indexing fields using annotation</title>
<programlisting>@Entity
@Indexed
@@ -1860,26 +1865,24 @@
@TokenFilterDef(factory = EnglishPorterFilterFactory.class)
})
})
- at FullTextFilterDefs({
- @FullTextFilterDef(name = "security", impl = SecurityFilterFactory.class, cache = FilterCacheModeType.INSTANCE_ONLY)
-})
public class Address {
@Id
@GeneratedValue
@DocumentId(name="id")
- pubblic Long getAddressId() {...};
+ private Long getAddressId() {...};
@Fields({
@Field(index=Index.TOKENIZED, store=Store.YES,
analyzer=@Analyzer(definition="en")),
@Field(name="address_data", analyzer=@Analyzer(definition="en"))
})
- public String getAddress1() {...};
+ public String getAddress1() {...}
......
-
}</programlisting>
+
+ <para></para>
</example></para>
</section>
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -70,7 +70,7 @@
public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
- return new FullTextFilterDefMapping(mapping, entity, name, impl);
+ return new FullTextFilterDefMapping(mapping,name, impl);
}
public PropertyMapping property(String name, ElementType type) {
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -39,15 +39,13 @@
private final SearchMapping mapping;
private final Map<String,Object> fullTextFilterDef;
- private final EntityDescriptor entity;
- public FullTextFilterDefMapping(SearchMapping mapping, EntityDescriptor entity, String name, Class<?> impl) {
+ public FullTextFilterDefMapping(SearchMapping mapping, String name, Class<?> impl) {
this.mapping = mapping;
- this.entity = entity;
this.fullTextFilterDef =new HashMap<String, Object>();
this.fullTextFilterDef.put("name", name);
this.fullTextFilterDef.put("impl", impl);
- entity.addFulltextFilterDef(fullTextFilterDef);
+ mapping.addFulltextFilterDef(fullTextFilterDef);
}
/**
@@ -61,13 +59,9 @@
}
public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
- return new FullTextFilterDefMapping(mapping,entity,name, impl);
+ return new FullTextFilterDefMapping(mapping, name, impl);
}
- public PropertyMapping property(String name, ElementType type) {
- return new PropertyMapping(name, type, entity, mapping);
- }
-
public AnalyzerDefMapping analyzerDef(String name, Class<? extends TokenizerFactory> tokenizerFactory) {
return new AnalyzerDefMapping(name, tokenizerFactory, mapping);
}
@@ -75,10 +69,4 @@
public EntityMapping entity(Class<?> entityType) {
return new EntityMapping(entityType, mapping);
}
-
- public ProvidedIdMapping providedId() {
- return new ProvidedIdMapping(mapping,entity);
- }
-
-
}
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -74,7 +74,7 @@
public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
- return new FullTextFilterDefMapping(mapping, entity, name, impl);
+ return new FullTextFilterDefMapping(mapping, name, impl);
}
public PropertyMapping property(String name, ElementType type) {
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -53,7 +53,7 @@
}
public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
- return new FullTextFilterDefMapping(searchMapping, entity, name, impl);
+ return new FullTextFilterDefMapping(searchMapping, name, impl);
}
public PropertyMapping property(String name, ElementType type) {
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -38,12 +38,17 @@
*/
public class SearchMapping {
private Set<Map<String, Object>> analyzerDefs = new HashSet<Map<String, Object>>();
+ private Set<Map<String, Object>> fullTextFilterDefs = new HashSet<Map<String, Object>>();
private Map<Class<?>, EntityDescriptor> entities = new HashMap<Class<?>, EntityDescriptor>();
public Set<Map<String, Object>> getAnalyzerDefs() {
return analyzerDefs;
}
+ public Set<Map<String, Object>> getFullTextFilerDefs() {
+ return fullTextFilterDefs;
+ }
+
public EntityDescriptor getEntityDescriptor(Class<?> entityType) {
return entities.get( entityType );
}
@@ -51,18 +56,23 @@
public AnalyzerDefMapping analyzerDef(String name, Class<? extends TokenizerFactory> tokenizerFactory) {
return new AnalyzerDefMapping(name, tokenizerFactory, this);
}
-
+
public EntityMapping entity(Class<?> entityType) {
return new EntityMapping(entityType, this);
}
+
+ public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
+ return new FullTextFilterDefMapping(this, name, impl );
+ }
/**
* eg @Containing(things={@Thing(...), @Thing(...)}
* Map<String, Object> addedThing = addElementToAnnotationArray(containing, "things");
*/
+
static Map<String, Object> addElementToAnnotationArray(Map<String, Object> containingAnnotation,
String attributeName) {
- List<Map<String, Object>> array = (List<Map<String, Object>>) containingAnnotation.get( attributeName );
+ @SuppressWarnings("unchecked") List<Map<String, Object>> array = (List<Map<String, Object>>) containingAnnotation.get( attributeName );
if ( array == null) {
array = new ArrayList<Map<String, Object>>();
containingAnnotation.put( attributeName, array );
@@ -84,5 +94,9 @@
}
return entity;
}
+
+ void addFulltextFilterDef(Map<String, Object> fullTextFilterDef) {
+ fullTextFilterDefs.add(fullTextFilterDef);
+ }
}
Modified: search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMapping.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMapping.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMapping.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -69,4 +69,8 @@
return new AnalyzerDefMapping(name, tokenizerFactory, mapping);
}
+ public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
+ return new FullTextFilterDefMapping(mapping, name, impl );
+ }
+
}
Modified: search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetadataProvider.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetadataProvider.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetadataProvider.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -101,10 +101,15 @@
new HashMap<Object, Object>() :
new HashMap<Object, Object>(delegateDefaults);
defaults.put( AnalyzerDefs.class, createAnalyzerDefArray() );
+ if (!mapping.getFullTextFilerDefs().isEmpty()) {
+ defaults.put(FullTextFilterDefs.class, createFullTextFilterDefsForMapping());
+ }
}
return defaults;
}
+
+
public AnnotationReader getAnnotationReader(AnnotatedElement annotatedElement) {
AnnotationReader reader = cache.get(annotatedElement);
if (reader == null) {
@@ -124,7 +129,36 @@
return defs;
}
+ private FullTextFilterDef[] createFullTextFilterDefsForMapping() {
+ Set<Map<String, Object>> fullTextFilterDefs = mapping.getFullTextFilerDefs();
+ FullTextFilterDef[] filters = new FullTextFilterDef[fullTextFilterDefs.size()];
+ int index = 0;
+ for(Map<String,Object> filterDef : fullTextFilterDefs) {
+ filters[index] = createFullTextFilterDef(filterDef);
+ index++;
+ }
+ return filters;
+ }
+ private static FullTextFilterDef createFullTextFilterDef(Map<String,Object> filterDef) {
+ AnnotationDescriptor fullTextFilterDefAnnotation = new AnnotationDescriptor( FullTextFilterDef.class );
+ for (Entry<String, Object> entry : filterDef.entrySet()) {
+ fullTextFilterDefAnnotation.setValue(entry.getKey(), entry.getValue());
+ }
+
+ return AnnotationFactory.create( fullTextFilterDefAnnotation );
+ }
+
+ private static FullTextFilterDef[] createFullTextFilterDefArray(Set<Map<String, Object>> fullTextFilterDefs) {
+ FullTextFilterDef[] filters = new FullTextFilterDef[fullTextFilterDefs.size()];
+ int index = 0;
+ for(Map<String,Object> filterDef : fullTextFilterDefs) {
+ filters[index] = createFullTextFilterDef(filterDef);
+ index++;
+ }
+ return filters;
+ }
+
private AnalyzerDef createAnalyzerDef(Map<String, Object> analyzerDef) {
AnnotationDescriptor analyzerDefAnnotation = new AnnotationDescriptor( AnalyzerDef.class );
for ( Map.Entry<String, Object> entry : analyzerDef.entrySet() ) {
@@ -436,7 +470,7 @@
}
if (entity.getFullTextFilterDefs().size() > 0) {
AnnotationDescriptor fullTextFilterDefsAnnotation = new AnnotationDescriptor( FullTextFilterDefs.class );
- FullTextFilterDef[] fullTextFilterDefArray = createFullTextFilterDefArray(entity);
+ FullTextFilterDef[] fullTextFilterDefArray = createFullTextFilterDefArray(entity.getFullTextFilterDefs());
fullTextFilterDefsAnnotation.setValue("value", fullTextFilterDefArray);
annotations.put( FullTextFilterDefs.class, AnnotationFactory.create( fullTextFilterDefsAnnotation ) );
}
@@ -469,27 +503,6 @@
annotations.put( ProvidedId.class, AnnotationFactory.create( annotation ) );
}
-
- private FullTextFilterDef[] createFullTextFilterDefArray(EntityDescriptor entity) {
- Set<Map<String, Object>> fullTextFilterDefs = entity.getFullTextFilterDefs();
- FullTextFilterDef[] filters = new FullTextFilterDef[fullTextFilterDefs.size()];
- int index = 0;
- for(Map<String,Object> filterDef : fullTextFilterDefs) {
- filters[index] = createFullTextFilterDef(filterDef);
- index++;
- }
- return filters;
- }
-
- private FullTextFilterDef createFullTextFilterDef(Map<String,Object> filterDef) {
- AnnotationDescriptor fullTextFilterDefAnnotation = new AnnotationDescriptor( FullTextFilterDef.class );
- for (Entry<String, Object> entry : filterDef.entrySet()) {
- fullTextFilterDefAnnotation.setValue(entry.getKey(), entry.getValue());
- }
-
- return AnnotationFactory.create( fullTextFilterDefAnnotation );
- }
-
private void populateAnnotationArray() {
annotationsArray = new Annotation[ annotations.size() ];
int index = 0;
Modified: search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -281,6 +281,20 @@
}
}
}
+
+
+ private void initProgrammaticallyDefinedFilterDef(ReflectionManager reflectionManager) {
+ @SuppressWarnings("unchecked") Map defaults = reflectionManager.getDefaults();
+ FullTextFilterDef[] filterDefs = (FullTextFilterDef[]) defaults.get(FullTextFilterDefs.class);
+ if (filterDefs != null && filterDefs.length != 0) {
+ for (FullTextFilterDef defAnn : filterDefs) {
+ if ( filterDefinitions.containsKey( defAnn.name() ) ) {
+ throw new SearchException("Multiple definition of @FullTextFilterDef.name=" + defAnn.name());
+ }
+ bindFullTextFilterDef(defAnn);
+ }
+ }
+ }
private void bindFilterDef(FullTextFilterDef defAnn, XClass mappedXClass) {
if ( filterDefinitions.containsKey( defAnn.name() ) ) {
@@ -290,6 +304,10 @@
);
}
+ bindFullTextFilterDef(defAnn);
+ }
+
+ private void bindFullTextFilterDef(FullTextFilterDef defAnn) {
FilterDef filterDef = new FilterDef( defAnn );
if ( filterDef.getImpl().equals( ShardSensitiveOnlyFilter.class ) ) {
//this is a placeholder don't process regularly
@@ -463,6 +481,7 @@
DirectoryProviderFactory factory = new DirectoryProviderFactory();
initProgrammaticAnalyzers(context, reflectionManager);
+ initProgrammaticallyDefinedFilterDef(reflectionManager);
while ( iter.hasNext() ) {
Class mappedClass = iter.next();
Modified: search/trunk/src/test/java/org/hibernate/search/test/configuration/ProgrammaticMappingTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/configuration/ProgrammaticMappingTest.java 2009-11-27 16:53:33 UTC (rev 18077)
+++ search/trunk/src/test/java/org/hibernate/search/test/configuration/ProgrammaticMappingTest.java 2009-11-27 17:30:32 UTC (rev 18078)
@@ -44,7 +44,6 @@
import org.apache.solr.analysis.NGramFilterFactory;
import org.apache.solr.analysis.SnowballPorterFilterFactory;
import org.apache.solr.analysis.StandardTokenizerFactory;
-import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.search.FullTextQuery;
@@ -54,12 +53,16 @@
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.annotations.Store;
+import org.hibernate.search.backend.Work;
+import org.hibernate.search.backend.WorkType;
import org.hibernate.search.bridge.builtin.LongBridge;
import org.hibernate.search.cfg.ConcatStringBridge;
import org.hibernate.search.cfg.SearchMapping;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.test.SearchTestCase;
import org.hibernate.search.test.analyzer.inheritance.ISOLatin1Analyzer;
+import org.hibernate.search.test.id.providedId.ManualTransactionContext;
/**
* @author Emmanuel Bernard
@@ -320,6 +323,9 @@
public void testProvidedIdMapping() throws Exception{
+ FullTextSession fullTextSession = Search.getFullTextSession( openSession() );
+ SearchFactoryImplementor sf = (SearchFactoryImplementor) fullTextSession.getSearchFactory();
+
ProvidedIdEntry person1 = new ProvidedIdEntry();
person1.setName( "Big Goat" );
person1.setBlurb( "Eats grass" );
@@ -332,17 +338,18 @@
person3.setName( "Regular goat" );
person3.setBlurb( "Is anorexic" );
- Session session = openSession();
- FullTextSession fullTextSession = Search.getFullTextSession( session );
- Transaction transaction = session.beginTransaction();
- session.persist( person1 );
- session.persist( person2 );
- session.persist( person3 );
+ ManualTransactionContext tc = new ManualTransactionContext();
- transaction.commit();
- session.clear();
+ Work<ProvidedIdEntry> work = new Work<ProvidedIdEntry>( person1, 1, WorkType.INDEX );
+ sf.getWorker().performWork( work, tc );
+ work = new Work<ProvidedIdEntry>( person2, 2, WorkType.INDEX );
+ sf.getWorker().performWork( work, tc );
+ Work<ProvidedIdEntry> work2 = new Work<ProvidedIdEntry>( person3, 3, WorkType.INDEX );
+ sf.getWorker().performWork( work2, tc );
- transaction = fullTextSession.beginTransaction();
+ tc.end();
+
+ Transaction transaction = fullTextSession.beginTransaction();
QueryParser parser = new QueryParser( "providedidentry.name", new StandardAnalyzer() );
Query luceneQuery = parser.parse( "Goat" );
@@ -364,7 +371,7 @@
- public void testFullTextFilterDef() throws Exception{
+ public void testFullTextFilterDefAtMappingLevel() throws Exception{
FullTextSession s = Search.getFullTextSession( openSession() );
Transaction tx = s.beginTransaction();
@@ -408,7 +415,6 @@
s.close();
}
-
public void testIndexEmbedded() throws Exception{
FullTextSession s = Search.getFullTextSession( openSession() );
Transaction tx = s.beginTransaction();
@@ -514,7 +520,8 @@
//cfg.setProperty( "hibernate.search.default.directory_provider", FSDirectoryProvider.class.getName() );
SearchMapping mapping = new SearchMapping();
- mapping.analyzerDef( "ngram", StandardTokenizerFactory.class )
+ mapping.fullTextFilterDef("security", SecurityFilterFactory.class).cache(FilterCacheModeType.INSTANCE_ONLY)
+ .analyzerDef( "ngram", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( NGramFilterFactory.class )
.param( "minGramSize", "3" )
@@ -525,10 +532,10 @@
.analyzerDef( "de", StandardTokenizerFactory.class )
.filter( LowerCaseFilterFactory.class )
.filter( GermanStemFilterFactory.class )
- .entity( Address.class ).indexed()
+ .entity( Address.class )
+ .indexed()
.similarity( DefaultSimilarity.class )
.boost( 2 )
- .fullTextFilterDef("security", SecurityFilterFactory.class).cache(FilterCacheModeType.INSTANCE_ONLY)
.property( "addressId", ElementType.FIELD ).documentId().name( "id" )
.property("lastUpdated", ElementType.FIELD)
.field().name("last-updated")
More information about the hibernate-commits
mailing list