diff --git a/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneSerializer.java b/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneSerializer.java index 7ea45d949..032fffe73 100644 --- a/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneSerializer.java +++ b/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneSerializer.java @@ -33,6 +33,7 @@ import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.ParamExpression; import com.mysema.query.types.ParamNotSetException; import com.mysema.query.types.Path; +import com.mysema.query.types.PathType; /** * Serializes Querydsl queries to Lucene queries. * @@ -330,7 +331,14 @@ public class LuceneSerializer { } protected String toField(Path path) { - return path.getMetadata().getExpression().toString(); + String rv = path.getMetadata().getExpression().toString(); + if (path.getMetadata().getParent() != null){ + Path parent = path.getMetadata().getParent(); + if (parent.getMetadata().getPathType() != PathType.VARIABLE){ + rv = toField(parent) + "." + rv; + } + } + return rv; } private void verifyArguments(Operation operation) { diff --git a/querydsl-lucene/src/test/java/com/mysema/query/LuceneSerializerTest.java b/querydsl-lucene/src/test/java/com/mysema/query/LuceneSerializerTest.java index fa3dbd02f..b18b687c5 100644 --- a/querydsl-lucene/src/test/java/com/mysema/query/LuceneSerializerTest.java +++ b/querydsl-lucene/src/test/java/com/mysema/query/LuceneSerializerTest.java @@ -14,8 +14,8 @@ import java.util.Arrays; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; -import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.NumericField; +import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; @@ -31,21 +31,15 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import com.mysema.query.BooleanBuilder; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.MatchingFilters; -import com.mysema.query.Module; -import com.mysema.query.QueryMetadata; -import com.mysema.query.StringConstant; -import com.mysema.query.Target; import com.mysema.query.lucene.LuceneSerializer; import com.mysema.query.lucene.LuceneUtils; import com.mysema.query.lucene.QueryElement; import com.mysema.query.types.Expression; import com.mysema.query.types.expr.BooleanExpression; import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; import com.mysema.query.types.path.PathBuilder; +import com.mysema.query.types.path.SimplePath; +import com.mysema.query.types.path.StringPath; /** * Tests for LuceneSerializer @@ -194,6 +188,12 @@ public class LuceneSerializerTest { public void eq() throws Exception { testQuery(rating.eq("Good"), "rating:good", 1); } + + @Test + public void eq_with_deep_path() throws Exception{ + StringPath deepPath = entityPath.get("property1", Object.class).getString("property2"); + testQuery(deepPath.eq("Good"), "property1.property2:good", 0); + } @Test public void fuzzyLike() throws Exception{