[hibernate-commits] Hibernate SVN: r13944 - in search/trunk/src: java/org/hibernate/search/engine and 1 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Aug 20 20:25:26 EDT 2007
Author: epbernard
Date: 2007-08-20 20:25:25 -0400 (Mon, 20 Aug 2007)
New Revision: 13944
Modified:
search/trunk/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
Log:
HSEARCH-108 id not indexed in embedded objects
Modified: search/trunk/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2007-08-20 14:47:34 UTC (rev 13943)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2007-08-21 00:25:25 UTC (rev 13944)
@@ -97,7 +97,7 @@
}
public void add(Object entity, Serializable id, WorkType workType, WorkQueue workQueue) {
- //don't check for builder it's done in performWorks
+ //don't check for builder it's done in prepareWork
Work work = new Work(entity, id, workType);
workQueue.add( work );
if ( batchSize > 0 && workQueue.size() >= batchSize ) {
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-08-20 14:47:34 UTC (rev 13943)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-08-21 00:25:25 UTC (rev 13944)
@@ -202,23 +202,41 @@
}
DocumentId documentIdAnn = member.getAnnotation( DocumentId.class );
- if ( isRoot && documentIdAnn != null ) {
- if ( idKeywordName != null ) {
- throw new AssertionFailure( "Two document id assigned: "
- + idKeywordName + " and " + BinderHelper.getAttributeName( member, documentIdAnn.name() ) );
+ if ( documentIdAnn != null ) {
+ if ( isRoot ) {
+ if ( idKeywordName != null ) {
+ throw new AssertionFailure( "Two document id assigned: "
+ + idKeywordName + " and " + BinderHelper.getAttributeName( member, documentIdAnn.name() ) );
+ }
+ idKeywordName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
+ FieldBridge fieldBridge = BridgeFactory.guessType( null, member );
+ if ( fieldBridge instanceof TwoWayFieldBridge ) {
+ idBridge = (TwoWayFieldBridge) fieldBridge;
+ }
+ else {
+ throw new SearchException(
+ "Bridge for document id does not implement IdFieldBridge: " + member.getName() );
+ }
+ idBoost = getBoost( member );
+ setAccessible( member );
+ idGetter = member;
}
- idKeywordName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
- FieldBridge fieldBridge = BridgeFactory.guessType( null, member );
- if ( fieldBridge instanceof TwoWayFieldBridge ) {
- idBridge = (TwoWayFieldBridge) fieldBridge;
- }
else {
- throw new SearchException(
- "Bridge for document id does not implement IdFieldBridge: " + member.getName() );
+ //component should index their document id
+ setAccessible( member );
+ propertiesMetadata.fieldGetters.add( member );
+ String fieldName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
+ propertiesMetadata.fieldNames.add( fieldName );
+ propertiesMetadata.fieldStore.add( getStore( Store.YES ) );
+ propertiesMetadata.fieldIndex.add( getIndex( Index.UN_TOKENIZED ) );
+ propertiesMetadata.fieldBridges.add( BridgeFactory.guessType( null, member ) );
+ // Field > property > entity analyzer
+ Analyzer analyzer = null; //no field analyzer
+ if ( analyzer == null ) analyzer = getAnalyzer( member );
+ if ( analyzer == null ) analyzer = propertiesMetadata.analyzer;
+ if ( analyzer == null ) throw new AssertionFailure( "Analizer should not be undefined" );
+ this.analyzer.addScopedAnalyzer( fieldName, analyzer );
}
- idBoost = getBoost( member );
- setAccessible( member );
- idGetter = member;
}
{
org.hibernate.search.annotations.Field fieldAnn =
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2007-08-20 14:47:34 UTC (rev 13943)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2007-08-21 00:25:25 UTC (rev 13944)
@@ -3,17 +3,17 @@
import java.util.List;
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.queryParser.MultiFieldQueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.index.Term;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.search.test.SearchTestCase;
/**
* @author Emmanuel Bernard
@@ -24,55 +24,57 @@
Tower tower = new Tower();
tower.setName( "JBoss tower" );
Address a = new Address();
- a.setStreet( "Tower place");
- a.getTowers().add(tower);
+ a.setStreet( "Tower place" );
+ a.getTowers().add( tower );
tower.setAddress( a );
Owner o = new Owner();
o.setName( "Atlanta Renting corp" );
a.setOwnedBy( o );
o.setAddress( a );
- Session s = openSession( );
+ Session s = openSession();
Transaction tx = s.beginTransaction();
s.persist( tower );
tx.commit();
-
+ FullTextSession session = Search.createFullTextSession( s );
+ QueryParser parser = new QueryParser( "id", new StandardAnalyzer() );
+ Query query;
+ List result;
- FullTextSession session = Search.createFullTextSession(s);
- QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
- Query query;
- List result;
+ query = parser.parse( "address.street:place" );
+ result = session.createFullTextQuery( query ).list();
+ assertEquals( "unable to find property in embedded", 1, result.size() );
- query = parser.parse("address.street:place");
- result = session.createFullTextQuery(query).list();
- assertEquals( "unable to find property in embedded", 1, result.size() );
-
- query = parser.parse("address.ownedBy_name:renting");
- result = session.createFullTextQuery(query, Tower.class).list();
+ query = parser.parse( "address.ownedBy_name:renting" );
+ result = session.createFullTextQuery( query, Tower.class ).list();
assertEquals( "unable to find property in embedded", 1, result.size() );
+ query = parser.parse( "address.id:" + a.getId().toString() );
+ result = session.createFullTextQuery( query, Tower.class ).list();
+ assertEquals( "unable to find property by id of embedded", 1, result.size() );
+
s.clear();
tx = s.beginTransaction();
- Address address = (Address) s.get(Address.class, a.getId() );
- address.getOwnedBy().setName( "Buckhead community");
+ Address address = (Address) s.get( Address.class, a.getId() );
+ address.getOwnedBy().setName( "Buckhead community" );
tx.commit();
s.clear();
- session = Search.createFullTextSession(s);
+ session = Search.createFullTextSession( s );
- query = parser.parse("address.ownedBy_name:buckhead");
- result = session.createFullTextQuery(query, Tower.class).list();
- assertEquals( "change in embedded not reflected in root index", 1, result.size() );
+ query = parser.parse( "address.ownedBy_name:buckhead" );
+ result = session.createFullTextQuery( query, Tower.class ).list();
+ assertEquals( "change in embedded not reflected in root index", 1, result.size() );
s.clear();
tx = s.beginTransaction();
- s.delete( s.get(Tower.class, tower.getId() ) );
+ s.delete( s.get( Tower.class, tower.getId() ) );
tx.commit();
s.close();
@@ -83,7 +85,7 @@
Tower tower = new Tower();
tower.setName( "JBoss tower" );
Address a = new Address();
- a.setStreet( "Tower place");
+ a.setStreet( "Tower place" );
a.getTowers().add( tower );
tower.setAddress( a );
Owner o = new Owner();
@@ -91,7 +93,7 @@
a.setOwnedBy( o );
o.setAddress( a );
- Session s = openSession( );
+ Session s = openSession();
Transaction tx = s.beginTransaction();
s.persist( tower );
tx.commit();
@@ -99,25 +101,25 @@
s.clear();
tx = s.beginTransaction();
- Address address = (Address) s.get(Address.class, a.getId() );
+ Address address = (Address) s.get( Address.class, a.getId() );
address.setStreet( "Peachtree Road NE" );
tx.commit();
s.clear();
- FullTextSession session = Search.createFullTextSession(s);
- QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
- Query query;
- List result;
+ FullTextSession session = Search.createFullTextSession( s );
+ QueryParser parser = new QueryParser( "id", new StandardAnalyzer() );
+ Query query;
+ List result;
- query = parser.parse("address.street:peachtree");
- result = session.createFullTextQuery(query, Tower.class).list();
- assertEquals( "change in embedded not reflected in root index", 1, result.size() );
+ query = parser.parse( "address.street:peachtree" );
+ result = session.createFullTextQuery( query, Tower.class ).list();
+ assertEquals( "change in embedded not reflected in root index", 1, result.size() );
s.clear();
tx = s.beginTransaction();
- address = (Address) s.get(Address.class, a.getId() );
+ address = (Address) s.get( Address.class, a.getId() );
Tower tower1 = address.getTowers().iterator().next();
tower1.setAddress( null );
address.getTowers().remove( tower1 );
@@ -125,14 +127,14 @@
s.clear();
- session = Search.createFullTextSession(s);
+ session = Search.createFullTextSession( s );
- query = parser.parse("address.street:peachtree");
- result = session.createFullTextQuery(query, Tower.class).list();
- assertEquals( "breaking link fails", 0, result.size() );
+ query = parser.parse( "address.street:peachtree" );
+ result = session.createFullTextQuery( query, Tower.class ).list();
+ assertEquals( "breaking link fails", 0, result.size() );
tx = s.beginTransaction();
- s.delete( s.get(Tower.class, tower.getId() ) );
+ s.delete( s.get( Tower.class, tower.getId() ) );
tx.commit();
s.close();
@@ -150,24 +152,24 @@
a4.setName( "Proust" );
Order o = new Order();
- o.setOrderNumber( "ACVBNM");
+ o.setOrderNumber( "ACVBNM" );
Order o2 = new Order();
- o2.setOrderNumber( "ZERTYD");
+ o2.setOrderNumber( "ZERTYD" );
Product p1 = new Product();
p1.setName( "Candide" );
- p1.getAuthors().add(a);
- p1.getAuthors().add(a2); //be creative
+ p1.getAuthors().add( a );
+ p1.getAuthors().add( a2 ); //be creative
Product p2 = new Product();
p2.setName( "Le malade imaginaire" );
- p2.getAuthors().add(a3);
- p2.getOrders().put("Emmanuel", o);
- p2.getOrders().put("Gavin", o2);
+ p2.getAuthors().add( a3 );
+ p2.getOrders().put( "Emmanuel", o );
+ p2.getOrders().put( "Gavin", o2 );
-
- Session s = openSession( );
+
+ Session s = openSession();
Transaction tx = s.beginTransaction();
s.persist( a );
s.persist( a2 );
@@ -181,28 +183,28 @@
s.clear();
- FullTextSession session = Search.createFullTextSession(s);
+ FullTextSession session = Search.createFullTextSession( s );
tx = session.beginTransaction();
- QueryParser parser = new MultiFieldQueryParser( new String[] {"name", "authors.name"}, new StandardAnalyzer() );
- Query query;
- List result;
+ QueryParser parser = new MultiFieldQueryParser( new String[] { "name", "authors.name" }, new StandardAnalyzer() );
+ Query query;
+ List result;
- query = parser.parse("Hugo");
- result = session.createFullTextQuery(query, Product.class).list();
- assertEquals( "collection of embedded ignored", 1, result.size() );
+ query = parser.parse( "Hugo" );
+ result = session.createFullTextQuery( query, Product.class ).list();
+ assertEquals( "collection of embedded ignored", 1, result.size() );
//update the collection
- Product p = (Product) result.get(0);
- p.getAuthors().add(a4);
+ Product p = (Product) result.get( 0 );
+ p.getAuthors().add( a4 );
//PhraseQuery
- query = new TermQuery(new Term("orders.orderNumber", "ZERTYD"));
- result = session.createFullTextQuery(query, Product.class).list();
- assertEquals( "collection of untokenized ignored", 1, result.size() );
- query = new TermQuery(new Term("orders.orderNumber", "ACVBNM"));
- result = session.createFullTextQuery(query, Product.class).list();
- assertEquals( "collection of untokenized ignored", 1, result.size() );
+ query = new TermQuery( new Term( "orders.orderNumber", "ZERTYD" ) );
+ result = session.createFullTextQuery( query, Product.class ).list();
+ assertEquals( "collection of untokenized ignored", 1, result.size() );
+ query = new TermQuery( new Term( "orders.orderNumber", "ACVBNM" ) );
+ result = session.createFullTextQuery( query, Product.class ).list();
+ assertEquals( "collection of untokenized ignored", 1, result.size() );
tx.commit();
@@ -210,13 +212,13 @@
tx = s.beginTransaction();
session = Search.createFullTextSession( s );
- query = parser.parse("Proust");
- result = session.createFullTextQuery(query, Product.class).list();
+ query = parser.parse( "Proust" );
+ result = session.createFullTextQuery( query, Product.class ).list();
//HSEARCH-56
assertEquals( "update of collection of embedded ignored", 1, result.size() );
- s.delete( s.get(Product.class, p1.getId() ) );
- s.delete( s.get(Product.class, p2.getId() ) );
+ s.delete( s.get( Product.class, p1.getId() ) );
+ s.delete( s.get( Product.class, p2.getId() ) );
tx.commit();
s.close();
More information about the hibernate-commits
mailing list