[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