You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2019/04/17 18:27:26 UTC

[maven-indexer] 01/01: [MINDEXER-115] Migrate to BooleanQuery.Builder

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MINDEXER-115
in repository https://gitbox.apache.org/repos/asf/maven-indexer.git

commit dbc981d2269a539c782a70e6016b5a2acbc4cb0e
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Sat Apr 6 22:08:18 2019 +0200

    [MINDEXER-115] Migrate to BooleanQuery.Builder
    
    Remove deprecated usages of BooleanQuery constructor - use Builder
    
    Based on Sopot Cela changes
---
 .../apache/maven/index/DefaultQueryCreator.java    | 39 ++++++----------
 .../java/org/apache/maven/index/NexusIndexer.java  |  9 ++--
 .../maven/index/treeview/DefaultIndexTreeView.java | 11 ++---
 .../maven/index/DefaultIndexNexusIndexerTest.java  | 35 ++++----------
 .../maven/index/FullIndexNexusIndexerTest.java     | 20 +++-----
 .../maven/index/Nexus13NexusIndexerTest.java       |  6 ---
 .../maven/index/Nexus3881NexusIndexerTest.java     | 12 ++---
 .../org/apache/maven/index/NexusIndexerTest.java   | 28 +++++------
 .../maven/index/SearchWithAnEmptyIndexTest.java    | 53 ++++++++-------------
 .../creator/OsgiArtifactIndexCreatorTest.java      | 54 ++++++++--------------
 .../resources/testQueryCreatorNGSearch/case01.txt  |  2 +-
 .../resources/testQueryCreatorNGSearch/case05.txt  |  2 +-
 .../maven/indexer/examples/BasicUsageExample.java  | 44 +++++++++---------
 .../examples/indexing/RepositoryIndexer.java       | 21 +++++----
 14 files changed, 138 insertions(+), 198 deletions(-)

diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
index 63a2196..8fab44b 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
@@ -30,6 +30,7 @@ import org.apache.lucene.queryparser.classic.QueryParser;
 import org.apache.lucene.queryparser.classic.QueryParser.Operator;
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
@@ -280,19 +281,12 @@ public class DefaultQueryCreator
                 }
                 else
                 {
-                    BooleanQuery bq = new BooleanQuery();
-
                     Term t = new Term( indexerField.getKey(), query );
-
-                    bq.add( new TermQuery( t ), Occur.SHOULD );
-
-                    PrefixQuery pq = new PrefixQuery( t );
-                    pq.setBoost( 0.8f );
-
-                    bq.add( pq, Occur.SHOULD );
-
-                    return bq;
-                }
+                    return new BooleanQuery.Builder()
+                        .add( new TermQuery( t ), Occur.SHOULD )
+                        .add( new BoostQuery( new PrefixQuery( t ), 0.8f ), Occur.SHOULD )
+                        .build();
+            }
             }
             else
             {
@@ -326,13 +320,12 @@ public class DefaultQueryCreator
                 {
                     // qpQuery = "\"" + qpQuery + "\"";
 
-                    BooleanQuery q1 = new BooleanQuery();
-
-                    q1.add( qp.parse( qpQuery ), Occur.SHOULD );
+                    BooleanQuery.Builder q1b = new BooleanQuery.Builder()
+                            .add( qp.parse( qpQuery ), Occur.SHOULD );
 
                     if ( qpQuery.contains( " " ) )
                     {
-                        q1.add( qp.parse( "\"" + qpQuery + "\"" ), Occur.SHOULD );
+                        q1b.add( qp.parse( "\"" + qpQuery + "\"" ), Occur.SHOULD );
                     }
 
                     Query q2 = null;
@@ -353,17 +346,15 @@ public class DefaultQueryCreator
 
                     if ( q2 == null )
                     {
-                        return q1;
+                        return q1b.build();
                     }
                     else
                     {
-                        BooleanQuery bq = new BooleanQuery();
-
-                        // trick with order
-                        bq.add( q2, Occur.SHOULD );
-                        bq.add( q1, Occur.SHOULD );
-
-                        return bq;
+                        return new BooleanQuery.Builder()
+                            // trick with order
+                            .add( q2, Occur.SHOULD )
+                            .add( q1b.build(), Occur.SHOULD )
+                            .build();
                     }
                 }
                 catch ( ParseException e )
diff --git a/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java b/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
index ab0678f..d3996d5 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
@@ -63,10 +63,11 @@ import org.apache.maven.index.expr.SearchExpression;
  * 
  * <pre>
  *   // run search query
- *   BooleanQuery q = new BooleanQuery();
- *   q.add(indexer.constructQuery(ArtifactInfo.GROUP_ID, term), Occur.SHOULD);
- *   q.add(indexer.constructQuery(ArtifactInfo.ARTIFACT_ID, term), Occur.SHOULD);
- *   q.add(new PrefixQuery(new Term(ArtifactInfo.SHA1, term)), Occur.SHOULD);
+ *   BooleanQuery q = new BooleanQuery.Builder()
+ *    .add(indexer.constructQuery(ArtifactInfo.GROUP_ID, term), Occur.SHOULD)
+ *    .add(indexer.constructQuery(ArtifactInfo.ARTIFACT_ID, term), Occur.SHOULD)
+ *    .add(new PrefixQuery(new Term(ArtifactInfo.SHA1, term)), Occur.SHOULD)
+ *    .build();
  *   
  *   FlatSearchRequest request = new FlatSearchRequest(q);
  *   FlatSearchResponse response = indexer.searchFlat(request);
diff --git a/indexer-core/src/main/java/org/apache/maven/index/treeview/DefaultIndexTreeView.java b/indexer-core/src/main/java/org/apache/maven/index/treeview/DefaultIndexTreeView.java
index 61f450c..d1a4490 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/treeview/DefaultIndexTreeView.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/treeview/DefaultIndexTreeView.java
@@ -518,21 +518,20 @@ public class DefaultIndexTreeView
             versionQ = getIndexer().constructQuery( MAVEN.VERSION, new SourcedSearchExpression( v ) );
         }
 
-        BooleanQuery q = new BooleanQuery();
-
-        q.add( new BooleanClause( groupIdQ, BooleanClause.Occur.MUST ) );
+        BooleanQuery.Builder qb = new BooleanQuery.Builder()
+            .add( new BooleanClause( groupIdQ, BooleanClause.Occur.MUST ) );
 
         if ( artifactIdQ != null )
         {
-            q.add( new BooleanClause( artifactIdQ, BooleanClause.Occur.MUST ) );
+            qb.add( new BooleanClause( artifactIdQ, BooleanClause.Occur.MUST ) );
         }
 
         if ( versionQ != null )
         {
-            q.add( new BooleanClause( versionQ, BooleanClause.Occur.MUST ) );
+            qb.add( new BooleanClause( versionQ, BooleanClause.Occur.MUST ) );
         }
 
-        IteratorSearchRequest searchRequest = new IteratorSearchRequest( q, request.getArtifactInfoFilter() );
+        IteratorSearchRequest searchRequest = new IteratorSearchRequest( qb.build(), request.getArtifactInfoFilter() );
 
         searchRequest.getContexts().add( request.getIndexingContext() );
 
diff --git a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
index e049496..35836af 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
@@ -29,11 +29,11 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.FilteredQuery;
+import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.QueryWrapperFilter;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
@@ -64,18 +64,10 @@ public class DefaultIndexNexusIndexerTest
     public void testPlugin()
         throws Exception
     {
-        // String term = "plugin";
-        // String term = "maven-core-it-plugin";
-        String term = "org.apache.maven.plugins";
-
-        // Query bq = new TermQuery(new Term(ArtifactInfo.GROUP_ID, "org.apache.maven.plugins"));
-        // Query bq = new TermQuery(new Term(ArtifactInfo.ARTIFACT_ID, term));
-        Query bq = new PrefixQuery( new Term( ArtifactInfo.GROUP_ID, term ) );
-        // BooleanQuery bq = new BooleanQuery();
-        // bq.add(new PrefixQuery(new Term(ArtifactInfo.GROUP_ID, term + "*")), Occur.SHOULD);
-        // bq.add(new PrefixQuery(new Term(ArtifactInfo.ARTIFACT_ID, term + "*")), Occur.SHOULD);
-        TermQuery tq = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-plugin" ) );
-        Query query = new FilteredQuery( tq, new QueryWrapperFilter( bq ) );
+        Query query = new BooleanQuery.Builder()
+            .add( new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-plugin" ) ), Occur.MUST )
+            .add( new PrefixQuery( new Term( ArtifactInfo.GROUP_ID, "org.apache.maven.plugins" ) ), Occur.FILTER )
+            .build();
 
         FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( query ) );
 
@@ -119,12 +111,6 @@ public class DefaultIndexNexusIndexerTest
     public void testSearchArchetypes()
         throws Exception
     {
-        // TermQuery tq = new TermQuery(new Term(ArtifactInfo.PACKAGING, "maven-archetype"));
-        // BooleanQuery bq = new BooleanQuery();
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.GROUP_ID, term + "*")), Occur.SHOULD);
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.ARTIFACT_ID, term + "*")), Occur.SHOULD);
-        // FilteredQuery query = new FilteredQuery(tq, new QueryWrapperFilter(bq));
-
         Query q = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) );
         FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q ) );
         Collection<ArtifactInfo> r = response.getResults();
@@ -240,11 +226,10 @@ public class DefaultIndexNexusIndexerTest
     public void testArchetype()
         throws Exception
     {
-        String term = "proptest";
-
-        Query bq = new PrefixQuery( new Term( ArtifactInfo.GROUP_ID, term ) );
-        TermQuery tq = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) );
-        Query query = new FilteredQuery( tq, new QueryWrapperFilter( bq ) );
+        Query query = new BooleanQuery.Builder()
+            .add( new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) ), Occur.MUST )
+            .add( new PrefixQuery( new Term( ArtifactInfo.GROUP_ID, "proptest" ) ), Occur.FILTER )
+            .build();
 
         FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( query ) );
 
diff --git a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
index 0c5e140..db69e47 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
@@ -19,8 +19,6 @@ package org.apache.maven.index;
  * under the License.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.nio.file.Files;
 import java.util.ArrayList;
@@ -33,16 +31,14 @@ import java.util.Set;
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryparser.classic.ParseException;
-import org.apache.lucene.search.FilteredQuery;
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.PrefixQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.QueryWrapperFilter;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.maven.index.context.IndexingContext;
-import org.apache.maven.index.packer.DefaultIndexPacker;
 import org.apache.maven.index.packer.IndexPacker;
 import org.apache.maven.index.packer.IndexPackingRequest;
 import org.apache.maven.index.search.grouping.GAGrouping;
@@ -51,6 +47,7 @@ import org.apache.maven.index.updater.DefaultIndexUpdater;
 import org.apache.maven.index.updater.IndexUpdateRequest;
 import org.apache.maven.index.updater.IndexUpdater;
 
+import static org.apache.lucene.search.BooleanClause.*;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -294,12 +291,6 @@ public class FullIndexNexusIndexerTest
     public void testSearchArchetypes()
         throws Exception
     {
-        // TermQuery tq = new TermQuery(new Term(ArtifactInfo.PACKAGING, "maven-archetype"));
-        // BooleanQuery bq = new BooleanQuery();
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.GROUP_ID, term + "*")), Occur.SHOULD);
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.ARTIFACT_ID, term + "*")), Occur.SHOULD);
-        // FilteredQuery query = new FilteredQuery(tq, new QueryWrapperFilter(bq));
-
         Query q = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) );
         FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q ) );
         Collection<ArtifactInfo> r = response.getResults();
@@ -418,9 +409,12 @@ public class FullIndexNexusIndexerTest
 
         Query bq = new PrefixQuery( new Term( ArtifactInfo.GROUP_ID, term ) );
         TermQuery tq = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) );
-        Query query = new FilteredQuery( tq, new QueryWrapperFilter( bq ) );
 
-        FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( query ) );
+        FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest(
+                new BooleanQuery.Builder()
+                .add(tq, Occur.MUST)
+                .add(bq, Occur.FILTER)
+                .build() ) );
 
         Collection<ArtifactInfo> r = response.getResults();
 
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
index f520a9e..e848270 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/Nexus13NexusIndexerTest.java
@@ -91,12 +91,6 @@ public class Nexus13NexusIndexerTest
     public void testSearchArchetypes()
         throws Exception
     {
-        // TermQuery tq = new TermQuery(new Term(ArtifactInfo.PACKAGING, "maven-archetype"));
-        // BooleanQuery bq = new BooleanQuery();
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.GROUP_ID, term + "*")), Occur.SHOULD);
-        // bq.add(new WildcardQuery(new Term(ArtifactInfo.ARTIFACT_ID, term + "*")), Occur.SHOULD);
-        // FilteredQuery query = new FilteredQuery(tq, new QueryWrapperFilter(bq));
-
         Query q = new TermQuery( new Term( ArtifactInfo.PACKAGING, "maven-archetype" ) );
 
         FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q ) );
diff --git a/indexer-core/src/test/java/org/apache/maven/index/Nexus3881NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/Nexus3881NexusIndexerTest.java
index 09988a0..99e00d1 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/Nexus3881NexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/Nexus3881NexusIndexerTest.java
@@ -25,7 +25,6 @@ import junit.framework.Assert;
 
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Query;
 
 public class Nexus3881NexusIndexerTest
     extends AbstractNexusIndexerTest
@@ -44,14 +43,11 @@ public class Nexus3881NexusIndexerTest
     public void testRelevances()
         throws Exception
     {
-        Query q1 = nexusIndexer.constructQuery( MAVEN.GROUP_ID, "solution", SearchType.SCORED );
-        Query q2 = nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, "solution", SearchType.SCORED );
+        IteratorSearchRequest request = new IteratorSearchRequest( new BooleanQuery.Builder()
+            .add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, "solution", SearchType.SCORED ), Occur.SHOULD )
+            .add( nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, "solution", SearchType.SCORED ), Occur.SHOULD )
+            .build() );
 
-        BooleanQuery bq = new BooleanQuery();
-        bq.add( q1, Occur.SHOULD );
-        bq.add( q2, Occur.SHOULD );
-
-        IteratorSearchRequest request = new IteratorSearchRequest( bq );
         request.setLuceneExplain( true );
         
         IteratorSearchResponse response = nexusIndexer.searchIterator( request );
diff --git a/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
index 21d1f92..33a3ff1 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
@@ -49,7 +49,6 @@ import org.apache.maven.index.context.MergedIndexingContext;
 import org.apache.maven.index.context.StaticContextMemberProvider;
 import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
 import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
-import org.apache.maven.index.packer.DefaultIndexPacker;
 import org.apache.maven.index.packer.IndexPacker;
 import org.apache.maven.index.packer.IndexPackingRequest;
 import org.apache.maven.index.search.grouping.GAGrouping;
@@ -119,13 +118,13 @@ public class NexusIndexerTest
         // scored search against field having untokenized indexerField only
         q = indexer.constructQuery( MAVEN.PACKAGING, "maven-archetype", SearchType.SCORED );
 
-        assertEquals( "p:maven-archetype p:maven-archetype*", q.toString() );
+        assertEquals( "p:maven-archetype p:maven-archetype*^0.8", q.toString() );
 
         // scored search against field having untokenized indexerField only
         q = indexer.constructQuery( MAVEN.ARTIFACT_ID, "commons-logging", SearchType.SCORED );
 
         assertEquals(
-            "(a:commons-logging a:commons-logging*) ((+artifactId:commons +artifactId:logging*) artifactId:\"commons logging\")",
+            "(a:commons-logging a:commons-logging*^0.8) ((+artifactId:commons +artifactId:logging*) artifactId:\"commons logging\")",
             q.toString() );
 
         // scored search against field having tokenized IndexerField only (should be impossible).
@@ -227,7 +226,6 @@ public class NexusIndexerTest
         // and comes the "trick", i will perform single _selection_!
         // I want to ensure there is an artifact present!
         // explanation: see for yourself ;)
-        BooleanQuery bq = new BooleanQuery();
 
         Query g = indexer.constructQuery( MAVEN.GROUP_ID, "commons-logging", SearchType.EXACT );
         Query a = indexer.constructQuery( MAVEN.ARTIFACT_ID, "commons-logging", SearchType.EXACT );
@@ -236,11 +234,13 @@ public class NexusIndexerTest
         Query c = indexer.constructQuery( MAVEN.CLASSIFIER, Field.NOT_PRESENT, SearchType.EXACT );
 
         // so, I am looking up GAVP (for content of those look above) that _has no_ classifier
-        bq.add( g, Occur.MUST );
-        bq.add( a, Occur.MUST );
-        bq.add( v, Occur.MUST );
-        bq.add( p, Occur.MUST );
-        bq.add( c, Occur.MUST_NOT );
+        BooleanQuery bq = new BooleanQuery.Builder()
+            .add( g, Occur.MUST )
+            .add( a, Occur.MUST )
+            .add( v, Occur.MUST )
+            .add( p, Occur.MUST )
+            .add( c, Occur.MUST_NOT )
+            .build();
 
         // invoking the old method (was present since day 1), that will return the match only and if only there is 1 hit
         Collection<ArtifactInfo> ais = indexer.identify( bq, Collections.singletonList( context ) );
@@ -443,10 +443,12 @@ public class NexusIndexerTest
         }
 
         {
-            BooleanQuery bq = new BooleanQuery( true );
-            bq.add( new WildcardQuery( new Term( ArtifactInfo.GROUP_ID, "testng*" ) ), Occur.SHOULD );
-            bq.add( new WildcardQuery( new Term( ArtifactInfo.ARTIFACT_ID, "testng*" ) ), Occur.SHOULD );
-            bq.setMinimumNumberShouldMatch( 1 );
+            BooleanQuery bq = new BooleanQuery.Builder()
+                .setDisableCoord( true )
+                .add( new WildcardQuery( new Term( ArtifactInfo.GROUP_ID, "testng*" ) ), Occur.SHOULD )
+                .add( new WildcardQuery( new Term( ArtifactInfo.ARTIFACT_ID, "testng*" ) ), Occur.SHOULD )
+                .setMinimumNumberShouldMatch( 1 )
+                .build();
 
             FlatSearchResponse response = indexer.searchFlat( new FlatSearchRequest( bq ) );
             Set<ArtifactInfo> r = response.getResults();
diff --git a/indexer-core/src/test/java/org/apache/maven/index/SearchWithAnEmptyIndexTest.java b/indexer-core/src/test/java/org/apache/maven/index/SearchWithAnEmptyIndexTest.java
index ad10a1d..7d86320 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/SearchWithAnEmptyIndexTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/SearchWithAnEmptyIndexTest.java
@@ -19,7 +19,6 @@ package org.apache.maven.index;
  * under the License.
  */
 
-import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.maven.index.context.IndexCreator;
@@ -34,6 +33,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import static org.apache.lucene.search.BooleanClause.*;
+
 /**
  * @author Olivier Lamy
  */
@@ -89,11 +90,9 @@ public class SearchWithAnEmptyIndexTest
 
         try
         {
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                                new StringSearchExpression( "org.apache.karaf.features.command" ) ),
-                   BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME, new StringSearchExpression( "org.apache.karaf.features.command" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             assertEquals( 2, nexusIndexer.getIndexingContexts().values().size() );
@@ -104,11 +103,9 @@ public class SearchWithAnEmptyIndexTest
 
             assertEquals( 1, response.getResults().size() );
 
-            q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                                new StringSearchExpression( "org.apache.karaf.features.core" ) ),
-                   BooleanClause.Occur.MUST );
+            q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME, new StringSearchExpression( "org.apache.karaf.features.core" ) ), Occur.MUST )
+                .build();
 
             request = new FlatSearchRequest( q );
             request.setContexts( new ArrayList( nexusIndexer.getIndexingContexts().values() ) );
@@ -119,18 +116,13 @@ public class SearchWithAnEmptyIndexTest
 
             String term = "org.apache.karaf.features";
 
-            q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( term ) ),
-                   BooleanClause.Occur.SHOULD );
-            q.add( nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ),
-                   BooleanClause.Occur.SHOULD );
-            q.add( nexusIndexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( term ) ),
-                   BooleanClause.Occur.SHOULD );
-            q.add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( term ) ),
-                   BooleanClause.Occur.SHOULD );
-            q.add( nexusIndexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( term ) ),
-                   BooleanClause.Occur.SHOULD );
+            q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( term ) ), Occur.SHOULD )
+                .add( nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ), Occur.SHOULD )
+                .add( nexusIndexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( term ) ), Occur.SHOULD )
+                .add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( term ) ), Occur.SHOULD )
+                .add( nexusIndexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( term ) ), Occur.SHOULD )
+                .build();
 
             request = new FlatSearchRequest( q );
             request.setContexts( new ArrayList( nexusIndexer.getIndexingContexts().values() ) );
@@ -173,16 +165,11 @@ public class SearchWithAnEmptyIndexTest
 
         try
         {
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-cli" ) ),
-                   BooleanClause.Occur.MUST );
-
-            q.add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( "jar" ) ),
-                   BooleanClause.Occur.MUST );
-
-            q.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new StringSearchExpression( "sources" ) ),
-                   BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-cli" ) ), Occur.MUST )
+                .add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( "jar" ) ), Occur.MUST )
+                .add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new StringSearchExpression( "sources" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             assertEquals( 2, nexusIndexer.getIndexingContexts().values().size() );
diff --git a/indexer-core/src/test/java/org/apache/maven/index/creator/OsgiArtifactIndexCreatorTest.java b/indexer-core/src/test/java/org/apache/maven/index/creator/OsgiArtifactIndexCreatorTest.java
index 5117544..f90224e 100644
--- a/indexer-core/src/test/java/org/apache/maven/index/creator/OsgiArtifactIndexCreatorTest.java
+++ b/indexer-core/src/test/java/org/apache/maven/index/creator/OsgiArtifactIndexCreatorTest.java
@@ -22,7 +22,7 @@ package org.apache.maven.index.creator;
 import java.io.File;
 import java.util.Arrays;
 import java.util.List;
-import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
@@ -193,11 +193,9 @@ public class OsgiArtifactIndexCreatorTest
         {
             indexOSGIRepo();
 
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                                new StringSearchExpression( "org.apache.karaf.features.command" ) ),
-                   BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME, new StringSearchExpression( "org.apache.karaf.features.command" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             FlatSearchResponse response = nexusIndexer.searchFlat( request );
@@ -205,11 +203,9 @@ public class OsgiArtifactIndexCreatorTest
             // here only one results !
             assertEquals( 1, response.getResults().size() );
 
-            q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                                new StringSearchExpression( "org.apache.karaf.features.core" ) ),
-                   BooleanClause.Occur.MUST );
+            q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME, new StringSearchExpression( "org.apache.karaf.features.core" ) ), Occur.MUST )
+                .build();
 
             request = new FlatSearchRequest( q );
             response = nexusIndexer.searchFlat( request );
@@ -232,14 +228,10 @@ public class OsgiArtifactIndexCreatorTest
         try
         {
 
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                                new StringSearchExpression( "org.apache.karaf.features.core" ) ),
-                   BooleanClause.Occur.MUST );
-
-            q.add( nexusIndexer.constructQuery( OSGI.VERSION, new StringSearchExpression( "2.2.1" ) ),
-                   BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.SYMBOLIC_NAME, new StringSearchExpression( "org.apache.karaf.features.core" ) ), Occur.MUST )
+                .add( nexusIndexer.constructQuery( OSGI.VERSION, new StringSearchExpression( "2.2.1" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             FlatSearchResponse response = nexusIndexer.searchFlat( request );
@@ -261,11 +253,9 @@ public class OsgiArtifactIndexCreatorTest
 
         try {
 
-            BooleanQuery q = new BooleanQuery();
-
-
-            q.add(nexusIndexer.constructQuery(OSGI.SHA256, new StringSearchExpression(CORE_4_1_0_SHA256)),
-                    BooleanClause.Occur.MUST);
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add(nexusIndexer.constructQuery( OSGI.SHA256, new StringSearchExpression(CORE_4_1_0_SHA256)), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest(q);
             FlatSearchResponse response = nexusIndexer.searchFlat(request);
@@ -290,11 +280,9 @@ public class OsgiArtifactIndexCreatorTest
 
         try
         {
-
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.EXPORT_PACKAGE, new StringSearchExpression(
-                "org.apache.karaf.features.command.completers" ) ), BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.EXPORT_PACKAGE, new StringSearchExpression( "org.apache.karaf.features.command.completers" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             FlatSearchResponse response = nexusIndexer.searchFlat( request );
@@ -336,11 +324,9 @@ public class OsgiArtifactIndexCreatorTest
 
         try
         {
-
-            BooleanQuery q = new BooleanQuery();
-
-            q.add( nexusIndexer.constructQuery( OSGI.EXPORT_SERVICE, new StringSearchExpression(
-                "org.apache.felix.bundlerepository.RepositoryAdmin" ) ), BooleanClause.Occur.MUST );
+            BooleanQuery q = new BooleanQuery.Builder()
+                .add( nexusIndexer.constructQuery( OSGI.EXPORT_SERVICE, new StringSearchExpression( "org.apache.felix.bundlerepository.RepositoryAdmin" ) ), Occur.MUST )
+                .build();
 
             FlatSearchRequest request = new FlatSearchRequest( q );
             FlatSearchResponse response = nexusIndexer.searchFlat( request );
diff --git a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
index ece9199..17691d9 100644
--- a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
+++ b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
@@ -1,4 +1,4 @@
-### Searched for field urn:maven#groupId (with 2 registered index fields) using query "commons-logg" (QC create LQL "(g:commons-logg g:commons-logg*) ((+groupId:commons +groupId:logg*) groupId:"commons logg")")
+### Searched for field urn:maven#groupId (with 2 registered index fields) using query "commons-logg" (QC create LQL "(g:commons-logg g:commons-logg*^0.8) ((+groupId:commons +groupId:logg*) groupId:"commons logg")")
 test :: commons-logging:commons-logging:1.1:null:jar
 test :: commons-logging:commons-logging:1.1:sources:jar
 test :: commons-logging:commons-logging:1.0.4:null:jar
diff --git a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
index 511516e..bd52ac6 100644
--- a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
+++ b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
@@ -1,4 +1,4 @@
-### Searched for field urn:maven#version (with 2 registered index fields) using query "1.0" (QC create LQL "(v:1.0 v:1.0*) ((+version:1 +version:0*) version:"1 0")")
+### Searched for field urn:maven#version (with 2 registered index fields) using query "1.0" (QC create LQL "(v:1.0 v:1.0*^0.8) ((+version:1 +version:0*) version:"1 0")")
 test :: proptest:proptest-archetype:1.0:null:maven-archetype
 test :: org.apache.maven.plugins:maven-core-it-plugin:1.0:null:maven-plugin
 test :: org.apache.maven.plugins:maven-core-it-plugin:1.0:sources:jar
diff --git a/indexer-examples/indexer-examples-basic/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java b/indexer-examples/indexer-examples-basic/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
index 6bdf666..808f3d5 100644
--- a/indexer-examples/indexer-examples-basic/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
+++ b/indexer-examples/indexer-examples-basic/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
@@ -233,16 +233,16 @@ public class BasicUsageExample
             indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.sonatype.nexus" ) );
         final Query artifactIdQ =
             indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "nexus-api" ) );
-        final BooleanQuery query = new BooleanQuery();
-        query.add( groupIdQ, Occur.MUST );
-        query.add( artifactIdQ, Occur.MUST );
 
-        // we want "jar" artifacts only
-        query.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), Occur.MUST );
-        // we want main artifacts only (no classifier)
-        // Note: this below is unfinished API, needs fixing
-        query.add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( Field.NOT_PRESENT ) ),
-                   Occur.MUST_NOT );
+        final BooleanQuery query = new BooleanQuery.Builder()
+            .add( groupIdQ, Occur.MUST )
+            .add( artifactIdQ, Occur.MUST )
+            // we want "jar" artifacts only
+            .add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), Occur.MUST )
+            // we want main artifacts only (no classifier)
+            // Note: this below is unfinished API, needs fixing
+            .add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( Field.NOT_PRESENT ) ), Occur.MUST_NOT )
+            .build();
 
         // construct the filter to express "V greater than"
         final ArtifactInfoFilter versionFilter = new ArtifactInfoFilter()
@@ -280,18 +280,19 @@ public class BasicUsageExample
             indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.indexer" ) );
         Query aidQ = indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "indexer-artifact" ) );
 
-        BooleanQuery bq = new BooleanQuery();
-        bq.add( gidQ, Occur.MUST );
-        bq.add( aidQ, Occur.MUST );
+        BooleanQuery bq = new BooleanQuery.Builder()
+                .add( gidQ, Occur.MUST )
+                .add( aidQ, Occur.MUST )
+                .build();
 
         searchAndDump( indexer, "all artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
 
         // Searching for some main artifact
-        bq = new BooleanQuery();
-        bq.add( gidQ, Occur.MUST );
-        bq.add( aidQ, Occur.MUST );
-        // bq.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( "*" ) ), Occur.MUST_NOT
-        // );
+        bq = new BooleanQuery.Builder()
+                .add( gidQ, Occur.MUST )
+                .add( aidQ, Occur.MUST )
+//                .add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( "*" ) ), Occur.MUST_NOT )
+                .build();
 
         searchAndDump( indexer, "main artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
 
@@ -311,10 +312,11 @@ public class BasicUsageExample
                                                new UserInputSearchExpression( "DefaultNexusIndexer" ) ) );
 
         // doing search for all "canonical" maven plugins latest versions
-        bq = new BooleanQuery();
-        bq.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-plugin" ) ), Occur.MUST );
-        bq.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.plugins" ) ),
-                Occur.MUST );
+        bq = new BooleanQuery.Builder()
+            .add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-plugin" ) ), Occur.MUST )
+            .add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.plugins" ) ), Occur.MUST )
+            .build();
+
         searchGroupedAndDump( indexer, "all \"canonical\" maven plugins", bq, new GAGrouping() );
 
         // doing search for all archetypes latest versions
diff --git a/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java b/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
index a9dbf1b..c4969dd 100644
--- a/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
+++ b/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
@@ -116,40 +116,42 @@ public class RepositoryIndexer
                                      final String packaging, final String classifier )
         throws IOException
     {
-        final BooleanQuery query = new BooleanQuery();
+        final BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
 
         if ( groupId != null )
         {
-            query.add( getIndexer().constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( groupId ) ), MUST );
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( groupId ) ), MUST );
         }
 
         if ( artifactId != null )
         {
-            query.add( getIndexer().constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( artifactId ) ),
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( artifactId ) ),
                        MUST );
         }
 
         if ( version != null )
         {
-            query.add( getIndexer().constructQuery( MAVEN.VERSION, new SourcedSearchExpression( version ) ), MUST );
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.VERSION, new SourcedSearchExpression( version ) ), MUST );
         }
 
         if ( packaging != null )
         {
-            query.add( getIndexer().constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( packaging ) ), MUST );
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( packaging ) ), MUST );
         }
         else
         {
             // Fallback to jar
-            query.add( getIndexer().constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), MUST );
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), MUST );
         }
 
         if ( classifier != null )
         {
-            query.add( getIndexer().constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( classifier ) ),
+            queryBuilder.add( getIndexer().constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( classifier ) ),
                        MUST );
         }
 
+        Query query = queryBuilder.build();
+
         LOGGER.debug( "Executing search query: {}; ctx id: {}; idx dir: {}",
                       new String[]{ query.toString(), indexingContext.getId(),
                           indexingContext.getIndexDirectory().toString() } );
@@ -198,8 +200,9 @@ public class RepositoryIndexer
     public Set<ArtifactInfo> searchBySHA1( final String checksum )
         throws IOException
     {
-        final BooleanQuery query = new BooleanQuery();
-        query.add( getIndexer().constructQuery( MAVEN.SHA1, new SourcedSearchExpression( checksum ) ), MUST );
+        final BooleanQuery query = new BooleanQuery.Builder()
+                .add( getIndexer().constructQuery( MAVEN.SHA1, new SourcedSearchExpression( checksum ) ), MUST )
+                .build();
 
         LOGGER.debug( "Executing search query: {}; ctx id: {}; idx dir: {}",
                       new String[]{ query.toString(), indexingContext.getId(),