diff --git a/src/main/scala/com/foursquare/slashem/Optimize.scala b/src/main/scala/com/foursquare/slashem/Optimize.scala index 0b43080..c0441ac 100644 --- a/src/main/scala/com/foursquare/slashem/Optimize.scala +++ b/src/main/scala/com/foursquare/slashem/Optimize.scala @@ -11,7 +11,9 @@ object Optimizer { filters.filter(f => { f match { //Remove all empty search clauses - case x: Query[Empty[_]] => false + case x: Clause[Splat[_]] => { + false + } case _ => true } }) diff --git a/src/main/scala/com/foursquare/slashem/QueryBuilder.scala b/src/main/scala/com/foursquare/slashem/QueryBuilder.scala index ccdcb2a..a4b5504 100644 --- a/src/main/scala/com/foursquare/slashem/QueryBuilder.scala +++ b/src/main/scala/com/foursquare/slashem/QueryBuilder.scala @@ -351,6 +351,10 @@ case class QueryBuilder[M <: Record[M], Ord, Lim, MM <: MinimumMatchType, Y, H < () } + /* Optimize the QueryBuilder */ + def optimize() = { + this.copy(filters=Optimizer.optimizeFilters(filters)) + } /** Fetch the results with the limit of l. Can only be used on an unlimited * query */ @@ -366,7 +370,7 @@ case class QueryBuilder[M <: Record[M], Ord, Lim, MM <: MinimumMatchType, Y, H < /** Fetch the results for a given query (blocking) with a specified timeout*/ def fetch(timeout: Duration): SearchResults[M, Y] = { // Gross++ - meta.query(timeout, this) + meta.query(timeout, this.optimize()) } /** Fetch the results for a given query (non-blocking)*/ def fetchFuture(): Future[SearchResults[M,Y]] = { diff --git a/src/test/scala/com/foursquare/slashem/QueryTest.scala b/src/test/scala/com/foursquare/slashem/QueryTest.scala index b4c0182..48974b2 100644 --- a/src/test/scala/com/foursquare/slashem/QueryTest.scala +++ b/src/test/scala/com/foursquare/slashem/QueryTest.scala @@ -98,6 +98,17 @@ class QueryTest extends SpecsMatchers with ScalaCheckMatchers { "rows" -> "10").sortWith(_._1 > _._1)) } + @Test + def testProduceCorrectListfieldFilterAny { + val q = SVenueTest where (_.metall any) filter (_.metall any) + val optimizedQ = q.optimize() + val qp = q.meta.queryParams(optimizedQ).toList + Assert.assertEquals(qp.sortWith(_._1 > _._1), + List("q" -> "*:*", + "start" -> "0", + "rows" -> "10").sortWith(_._1 > _._1)) + } + @Test