Author: epbernard
Date: 2008-02-12 12:02:10 -0500 (Tue, 12 Feb 2008)
New Revision: 14331
Modified:
search/trunk/src/java/org/hibernate/search/ProjectionConstants.java
search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java
search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java
Log:
HSEARCH-147 project Lucene document id
Modified: search/trunk/src/java/org/hibernate/search/ProjectionConstants.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/ProjectionConstants.java 2008-02-12
16:06:21 UTC (rev 14330)
+++ search/trunk/src/java/org/hibernate/search/ProjectionConstants.java 2008-02-12
17:02:10 UTC (rev 14331)
@@ -28,6 +28,11 @@
*/
public String ID = "__HSearch_id";
/**
+ * Lucene Document id
+ * Expert: Lucene document id can change overtime between 2 different IndexReader
opening.
+ */
+ public String DOCUMENT_ID = "__HSearch_DocumentId";
+ /**
* Object class
*/
//TODO OBJECT CLASS
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java 2008-02-12
16:06:21 UTC (rev 14330)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java 2008-02-12
17:02:10 UTC (rev 14331)
@@ -51,6 +51,9 @@
else if ( ProjectionConstants.DOCUMENT.equals( projection[x] ) ) {
eip[x] = doc;
}
+ else if ( ProjectionConstants.DOCUMENT_ID.equals( projection[x] ) ) {
+ eip[x] = hits.id( index );
+ }
else if ( ProjectionConstants.BOOST.equals( projection[x] ) ) {
eip[x] = doc.getBoost();
}
Modified: search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java
===================================================================
---
search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java 2008-02-12
16:06:21 UTC (rev 14330)
+++
search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java 2008-02-12
17:02:10 UTC (rev 14331)
@@ -185,7 +185,8 @@
Query query = parser.parse( "dept:ITech" );
org.hibernate.search.FullTextQuery hibQuery = s.createFullTextQuery( query,
Employee.class );
- hibQuery.setProjection( "id", "lastname", "dept",
FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST, FullTextQuery.DOCUMENT,
FullTextQuery.ID );
+ hibQuery.setProjection( "id", "lastname", "dept",
FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST,
+ FullTextQuery.DOCUMENT, FullTextQuery.ID );
int counter = 0;
@@ -219,7 +220,8 @@
Query query = parser.parse( "dept:Accounting" );
org.hibernate.search.FullTextQuery hibQuery = s.createFullTextQuery( query,
Employee.class );
- hibQuery.setProjection( "id", "lastname", "dept",
FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST, FullTextQuery.DOCUMENT,
FullTextQuery.ID );
+ hibQuery.setProjection( "id", "lastname", "dept",
FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST,
+ FullTextQuery.DOCUMENT, FullTextQuery.ID, FullTextQuery.DOCUMENT_ID );
List result = hibQuery.list();
assertNotNull( result );
@@ -236,9 +238,11 @@
assertTrue( "DOCUMENT incorrect", projection[6] instanceof Document );
assertEquals( "DOCUMENT size incorrect", 4, ( (Document) projection[6]
).getFields().size() );
assertEquals( "ID incorrect", 1001, projection[7] );
+ assertNotNull( "Lucene internal doc id", projection[8] );
// Change the projection order and null one
- hibQuery.setProjection( FullTextQuery.DOCUMENT, FullTextQuery.THIS,
FullTextQuery.SCORE, null, FullTextQuery.ID, "id", "lastname",
"dept" );
+ hibQuery.setProjection( FullTextQuery.DOCUMENT, FullTextQuery.THIS,
FullTextQuery.SCORE, null, FullTextQuery.ID,
+ "id", "lastname", "dept", FullTextQuery.DOCUMENT_ID );
result = hibQuery.list();
assertNotNull( result );
@@ -255,6 +259,7 @@
assertEquals( "id incorrect", 1001, projection[5] );
assertEquals( "last name incorrect", "Jackson", projection[6] );
assertEquals( "dept incorrect", "Accounting", projection[7] );
+ assertNotNull( "Lucene internal doc id", projection[8] );
//cleanup
for (Object element : s.createQuery( "from " + Employee.class.getName()
).list()) s.delete( element );