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/06/14 07:33:02 UTC

[maven-indexer] branch MINDEXER-118 created (now 005bc5e)

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

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


      at 005bc5e  [MINDEXER-118] Eliminate use of deprecated Lucene API - Field

This branch includes the following new commits:

     new 005bc5e  [MINDEXER-118] Eliminate use of deprecated Lucene API - Field

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-indexer] 01/01: [MINDEXER-118] Eliminate use of deprecated Lucene API - Field

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 005bc5e3d870b4e79e8e1593bfc098deaaa78f75
Author: Mat Booth <ma...@redhat.com>
AuthorDate: Thu Jun 13 00:27:17 2019 +0100

    [MINDEXER-118] Eliminate use of deprecated Lucene API - Field
    
    Refactor to avoid using the following deprecated symbols:
     * Field.Index
     * Field.TermVector
     * Token
    
    These symbols only exist to support transitioning from pre-4.0
    Lucene APIs, so this will make it easier to move to newer Lucenes
    in the future.
    
    Signed-off-by: Mat Booth <ma...@redhat.com>
---
 .../org/apache/maven/index/ArtifactContext.java    |  9 +--
 .../org/apache/maven/index/ArtifactInfoRecord.java |  8 +-
 .../apache/maven/index/DefaultIndexerEngine.java   |  8 +-
 .../java/org/apache/maven/index/IndexerField.java  | 90 ++++++++++------------
 .../org/apache/maven/index/OneLineFragmenter.java  | 11 ---
 .../index/context/DefaultIndexingContext.java      | 14 ++--
 .../org/apache/maven/index/context/IndexUtils.java |  8 +-
 .../index/creator/JarFileContentsIndexCreator.java |  6 +-
 .../MavenPluginArtifactInfoIndexCreator.java       |  6 +-
 .../creator/MinimalArtifactInfoIndexCreator.java   | 39 +++++-----
 .../index/creator/OsgiArtifactIndexCreator.java    | 41 +++++-----
 .../maven/index/updater/IndexDataReader.java       | 21 +++--
 .../maven/index/updater/IndexDataWriter.java       | 19 ++---
 13 files changed, 125 insertions(+), 155 deletions(-)

diff --git a/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java b/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
index a720028..18a5e94 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/ArtifactContext.java
@@ -28,8 +28,7 @@ import java.util.List;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.StoredField;
 import org.apache.maven.index.artifact.Gav;
 import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
@@ -166,10 +165,10 @@ public class ArtifactContext
         Document doc = new Document();
 
         // unique key
-        doc.add( new Field( ArtifactInfo.UINFO, getArtifactInfo().getUinfo(), Store.YES, Index.NOT_ANALYZED ) );
+        doc.add( new Field( ArtifactInfo.UINFO, getArtifactInfo().getUinfo(), IndexerField.KEYWORD_STORED ) );
 
-        doc.add( new Field( ArtifactInfo.LAST_MODIFIED, //
-            Long.toString( System.currentTimeMillis() ), Store.YES, Index.NO ) );
+        doc.add( new StoredField( ArtifactInfo.LAST_MODIFIED, //
+            Long.toString( System.currentTimeMillis() ) ) );
 
         for ( IndexCreator indexCreator : context.getIndexCreators() )
         {
diff --git a/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfoRecord.java b/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfoRecord.java
index 9e65d53..f1bfe85 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfoRecord.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/ArtifactInfoRecord.java
@@ -22,8 +22,7 @@ package org.apache.maven.index;
 import java.io.Serializable;
 import java.util.regex.Pattern;
 
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.StoredField;
 
 /**
  * Pulling out ArtifactInfo, clearing up. TBD. This gonna be extensible "map-like" class with fields.
@@ -53,14 +52,13 @@ public class ArtifactInfoRecord
      * Unique groupId, artifactId, version, classifier, extension (or packaging). Stored, indexed untokenized
      */
     public static final IndexerField FLD_UINFO = new IndexerField( NEXUS.UINFO, IndexerFieldVersion.V1, "u",
-        "Artifact UINFO (as keyword, stored)", Store.YES, Index.NOT_ANALYZED );
+        "Artifact UINFO (as keyword, stored)", IndexerField.KEYWORD_STORED );
 
     /**
      * Del: contains UINFO to mark record as deleted (needed for incremental updates!). The original document IS
      * removed, but this marker stays on index to note that fact.
      */
     public static final IndexerField FLD_DELETED = new IndexerField( NEXUS.DELETED, IndexerFieldVersion.V1, "del",
-        "Deleted field, will contain UINFO if document is deleted from index (not indexed, stored)", Store.YES,
-        Index.NO );
+        "Deleted field, will contain UINFO if document is deleted from index (not indexed, stored)", StoredField.TYPE );
 
 }
diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java
index ba234eb..64faa77 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java
@@ -27,7 +27,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
+import org.apache.lucene.document.StoredField;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.Term;
@@ -100,9 +100,9 @@ public class DefaultIndexerEngine
             // add artifact deletion marker
             final Document doc = new Document();
 
-            doc.add( new Field( ArtifactInfo.DELETED, uinfo, Field.Store.YES, Field.Index.NO ) );
-            doc.add( new Field( ArtifactInfo.LAST_MODIFIED, //
-                Long.toString( System.currentTimeMillis() ), Field.Store.YES, Field.Index.NO ) );
+            doc.add( new StoredField( ArtifactInfo.DELETED, uinfo ) );
+            doc.add( new StoredField( ArtifactInfo.LAST_MODIFIED, //
+                Long.toString( System.currentTimeMillis() ) ) );
 
             IndexWriter w = context.getIndexWriter();
             w.addDocument( doc );
diff --git a/indexer-core/src/main/java/org/apache/maven/index/IndexerField.java b/indexer-core/src/main/java/org/apache/maven/index/IndexerField.java
index bf99c97..3d67b2a 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/IndexerField.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/IndexerField.java
@@ -20,9 +20,8 @@ package org.apache.maven.index;
  */
 
 import org.apache.lucene.document.Field;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
-import org.apache.lucene.document.Field.TermVector;
+import org.apache.lucene.document.FieldType;
+import org.apache.lucene.index.IndexOptions;
 
 /**
  * Holds basic information about Indexer field, how it is stored. To keep this centralized, and not spread across code.
@@ -38,21 +37,45 @@ public class IndexerField
 
     private final String key;
 
-    private final Store storeMethod;
+    private final FieldType fieldType;
 
-    private final Index indexMethod;
+    /** Indexed, not tokenized, not stored. */
+    public static final FieldType KEYWORD_NOT_STORED = new FieldType();
 
-    private final TermVector termVector;
+    /** Indexed, not tokenized, stored. */
+    public static final FieldType KEYWORD_STORED = new FieldType();
 
-    public IndexerField( final org.apache.maven.index.Field ontology, final IndexerFieldVersion version,
-                         final String key, final String description, final Store storeMethod, final Index indexMethod )
+    /** Indexed, tokenized, not stored. */
+    public static final FieldType ANALYZED_NOT_STORED = new FieldType();
+
+    /** Indexed, tokenized, stored. */
+    public static final FieldType ANALYZED_STORED = new FieldType();
+
+    static
     {
-        this( ontology, version, key, description, storeMethod, indexMethod, null );
+        KEYWORD_NOT_STORED.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS );
+        KEYWORD_NOT_STORED.setStored( false );
+        KEYWORD_NOT_STORED.setTokenized( false );
+        KEYWORD_NOT_STORED.freeze();
+
+        KEYWORD_STORED.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS );
+        KEYWORD_STORED.setStored( true );
+        KEYWORD_STORED.setTokenized( false );
+        KEYWORD_STORED.freeze();
+
+        ANALYZED_NOT_STORED.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS );
+        ANALYZED_NOT_STORED.setStored( false );
+        ANALYZED_NOT_STORED.setTokenized( true );
+        ANALYZED_NOT_STORED.freeze();
+
+        ANALYZED_STORED.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS );
+        ANALYZED_STORED.setStored( true );
+        ANALYZED_STORED.setTokenized( true );
+        ANALYZED_STORED.freeze();
     }
 
     public IndexerField( final org.apache.maven.index.Field ontology, final IndexerFieldVersion version,
-                         final String key, final String description, final Store storeMethod, final Index indexMethod,
-                         final TermVector termVector )
+            final String key, final String description, final FieldType fieldType )
     {
         this.ontology = ontology;
 
@@ -60,11 +83,7 @@ public class IndexerField
 
         this.key = key;
 
-        this.storeMethod = storeMethod;
-
-        this.indexMethod = indexMethod;
-
-        this.termVector = termVector;
+        this.fieldType = fieldType;
 
         ontology.addIndexerField( this );
     }
@@ -84,55 +103,28 @@ public class IndexerField
         return key;
     }
 
-    public Field.Store getStoreMethod()
-    {
-        return storeMethod;
-    }
-
-    public Field.Index getIndexMethod()
-    {
-        return indexMethod;
-    }
-
-    public Field.TermVector getTermVector()
+    public FieldType getFieldType()
     {
-        return termVector;
+        return fieldType;
     }
 
     public boolean isIndexed()
     {
-        return !Index.NO.equals( indexMethod );
+        return fieldType.indexOptions() != IndexOptions.NONE;
     }
 
     public boolean isKeyword()
     {
-        return isIndexed() && !Index.ANALYZED.equals( indexMethod );
+        return isIndexed() && !fieldType.tokenized();
     }
 
     public boolean isStored()
     {
-        return !( Store.NO.equals( storeMethod ) );
+        return fieldType.stored();
     }
 
     public Field toField( String value )
     {
-        Field result;
-
-        if ( getTermVector() != null )
-        {
-            result = new Field( getKey(), value, getStoreMethod(), getIndexMethod(), getTermVector() );
-        }
-        else
-        {
-            result = new Field( getKey(), value, getStoreMethod(), getIndexMethod() );
-        }
-
-        // if ( isKeyword() )
-        // {
-        // result.setOmitNorms( true );
-        // result.setOmitTf( true );
-        // }
-
-        return result;
+        return new Field( getKey(), value, getFieldType() );
     }
 }
diff --git a/indexer-core/src/main/java/org/apache/maven/index/OneLineFragmenter.java b/indexer-core/src/main/java/org/apache/maven/index/OneLineFragmenter.java
index d346a04..d0c9af3 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/OneLineFragmenter.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/OneLineFragmenter.java
@@ -19,7 +19,6 @@ package org.apache.maven.index;
  * under the License.
  */
 
-import org.apache.lucene.analysis.Token;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.search.highlight.Fragmenter;
 
@@ -33,16 +32,6 @@ public class OneLineFragmenter
         setText( originalText );
     }
 
-    public boolean isNewFragment( Token nextToken )
-    {
-        // text: /org/sonatype/...
-        // tokens: org sonatype
-        boolean result =
-            isNewline( getChar( nextToken.startOffset() - 1 ) ) || isNewline( getChar( nextToken.startOffset() - 2 ) );
-
-        return result;
-    }
-
     protected boolean isNewline( char c )
     {
         return c == '\n';
diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java b/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
index 6a092c1..8a64a4d 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
@@ -33,9 +33,11 @@ import java.util.Date;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.StoredField;
 import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
@@ -55,6 +57,7 @@ import org.apache.lucene.store.Lock;
 import org.apache.lucene.store.LockObtainFailedException;
 import org.apache.lucene.util.Bits;
 import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.IndexerField;
 import org.apache.maven.index.artifact.GavCalculator;
 import org.apache.maven.index.artifact.M2GavCalculator;
 import org.codehaus.plexus.util.StringUtils;
@@ -363,10 +366,9 @@ public class DefaultIndexingContext
     {
         Document hdr = new Document();
 
-        hdr.add( new Field( FLD_DESCRIPTOR, FLD_DESCRIPTOR_CONTENTS, Field.Store.YES, Field.Index.NOT_ANALYZED ) );
+        hdr.add( new Field( FLD_DESCRIPTOR, FLD_DESCRIPTOR_CONTENTS, IndexerField.KEYWORD_STORED ) );
 
-        hdr.add( new Field( FLD_IDXINFO, VERSION + ArtifactInfo.FS + getRepositoryId(), Field.Store.YES,
-                            Field.Index.NO ) );
+        hdr.add( new StoredField( FLD_IDXINFO, VERSION + ArtifactInfo.FS + getRepositoryId() ) );
 
         IndexWriter w = getIndexWriter();
 
@@ -876,10 +878,8 @@ public class DefaultIndexingContext
                                              String listField )
     {
         final Document groupDoc = new Document();
-        groupDoc.add( new Field( field, //
-            fieldValue, Field.Store.YES, Field.Index.NOT_ANALYZED ) );
-        groupDoc.add( new Field( listField, //
-            ArtifactInfo.lst2str( groups ), Field.Store.YES, Field.Index.NO ) );
+        groupDoc.add( new Field( field, fieldValue, IndexerField.KEYWORD_STORED ) );
+        groupDoc.add( new StoredField( listField, ArtifactInfo.lst2str( groups ) ) );
         return groupDoc;
     }
 
diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java b/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
index cd676ff..f7ef771 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
@@ -29,6 +29,7 @@ import java.util.Date;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.StoredField;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.Directory;
@@ -36,6 +37,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.IndexerField;
 import org.codehaus.plexus.util.FileUtils;
 
 public class IndexUtils
@@ -149,12 +151,12 @@ public class IndexUtils
         Document document = new Document();
 
         // unique key
-        document.add( new Field( ArtifactInfo.UINFO, ai.getUinfo(), Field.Store.YES, Field.Index.NOT_ANALYZED ) );
+        document.add( new Field( ArtifactInfo.UINFO, ai.getUinfo(), IndexerField.KEYWORD_STORED ) );
 
         if ( updateLastModified || doc.getField( ArtifactInfo.LAST_MODIFIED ) == null )
         {
-            document.add( new Field( ArtifactInfo.LAST_MODIFIED, //
-                Long.toString( System.currentTimeMillis() ), Field.Store.YES, Field.Index.NO ) );
+            document.add( new StoredField( ArtifactInfo.LAST_MODIFIED, //
+                Long.toString( System.currentTimeMillis() ) ) );
         }
         else
         {
diff --git a/indexer-core/src/main/java/org/apache/maven/index/creator/JarFileContentsIndexCreator.java b/indexer-core/src/main/java/org/apache/maven/index/creator/JarFileContentsIndexCreator.java
index e1499c8..3b1fe06 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/creator/JarFileContentsIndexCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/creator/JarFileContentsIndexCreator.java
@@ -28,8 +28,6 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.IndexerField;
@@ -52,7 +50,7 @@ public class JarFileContentsIndexCreator
     public static final String ID = "jarContent";
 
     public static final IndexerField FLD_CLASSNAMES = new IndexerField( MAVEN.CLASSNAMES, IndexerFieldVersion.V3,
-        "classnames", "Artifact Classes (tokenized)", Store.NO, Index.ANALYZED );
+        "classnames", "Artifact Classes (tokenized)", IndexerField.ANALYZED_NOT_STORED );
 
     /**
      * NexusAnalyzer makes exception with this field only, to keep backward compatibility with old consumers of
@@ -60,7 +58,7 @@ public class JarFileContentsIndexCreator
      * registered BEFORE FLD_CLASSNAMES_KW!
      */
     public static final IndexerField FLD_CLASSNAMES_KW = new IndexerField( MAVEN.CLASSNAMES, IndexerFieldVersion.V1,
-        "c", "Artifact Classes (tokenized on newlines only)", Store.YES, Index.ANALYZED );
+        "c", "Artifact Classes (tokenized on newlines only)", IndexerField.ANALYZED_STORED );
 
     public JarFileContentsIndexCreator()
     {
diff --git a/indexer-core/src/main/java/org/apache/maven/index/creator/MavenPluginArtifactInfoIndexCreator.java b/indexer-core/src/main/java/org/apache/maven/index/creator/MavenPluginArtifactInfoIndexCreator.java
index 71e18d9..694ad1a 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/creator/MavenPluginArtifactInfoIndexCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/creator/MavenPluginArtifactInfoIndexCreator.java
@@ -31,8 +31,6 @@ import java.util.Arrays;
 import java.util.Collection;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.IndexerField;
@@ -61,10 +59,10 @@ public class MavenPluginArtifactInfoIndexCreator
     private static final String MAVEN_PLUGIN_PACKAGING = "maven-plugin";
 
     public static final IndexerField FLD_PLUGIN_PREFIX = new IndexerField( MAVEN.PLUGIN_PREFIX, IndexerFieldVersion.V1,
-        "px", "MavenPlugin prefix (as keyword, stored)", Store.YES, Index.NOT_ANALYZED );
+        "px", "MavenPlugin prefix (as keyword, stored)", IndexerField.KEYWORD_STORED );
 
     public static final IndexerField FLD_PLUGIN_GOALS = new IndexerField( MAVEN.PLUGIN_GOALS, IndexerFieldVersion.V1,
-        "gx", "MavenPlugin goals (as keyword, stored)", Store.YES, Index.ANALYZED );
+        "gx", "MavenPlugin goals (as keyword, stored)", IndexerField.ANALYZED_STORED );
 
     public MavenPluginArtifactInfoIndexCreator()
     {
diff --git a/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java b/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
index feea2d2..d899705 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/creator/MinimalArtifactInfoIndexCreator.java
@@ -28,8 +28,7 @@ import java.util.Collection;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.StoredField;
 import org.apache.maven.index.ArtifactAvailability;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
@@ -67,46 +66,46 @@ public class MinimalArtifactInfoIndexCreator
      * Info: packaging, lastModified, size, sourcesExists, javadocExists, signatureExists. Stored, not indexed.
      */
     public static final IndexerField FLD_INFO = new IndexerField( NEXUS.INFO, IndexerFieldVersion.V1, "i",
-        "Artifact INFO (not indexed, stored)", Store.YES, Index.NO );
+        "Artifact INFO (not indexed, stored)", StoredField.TYPE );
 
     public static final IndexerField FLD_GROUP_ID_KW = new IndexerField( MAVEN.GROUP_ID, IndexerFieldVersion.V1, "g",
-        "Artifact GroupID (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "Artifact GroupID (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_GROUP_ID = new IndexerField( MAVEN.GROUP_ID, IndexerFieldVersion.V3,
-        "groupId", "Artifact GroupID (tokenized)", Store.NO, Index.ANALYZED );
+        "groupId", "Artifact GroupID (tokenized)", IndexerField.ANALYZED_NOT_STORED );
 
     public static final IndexerField FLD_ARTIFACT_ID_KW = new IndexerField( MAVEN.ARTIFACT_ID, IndexerFieldVersion.V1,
-        "a", "Artifact ArtifactID (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "a", "Artifact ArtifactID (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_ARTIFACT_ID = new IndexerField( MAVEN.ARTIFACT_ID, IndexerFieldVersion.V3,
-        "artifactId", "Artifact ArtifactID (tokenized)", Store.NO, Index.ANALYZED );
+        "artifactId", "Artifact ArtifactID (tokenized)", IndexerField.ANALYZED_NOT_STORED );
 
     public static final IndexerField FLD_VERSION_KW = new IndexerField( MAVEN.VERSION, IndexerFieldVersion.V1, "v",
-        "Artifact Version (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "Artifact Version (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_VERSION = new IndexerField( MAVEN.VERSION, IndexerFieldVersion.V3, "version",
-        "Artifact Version (tokenized)", Store.NO, Index.ANALYZED );
+        "Artifact Version (tokenized)", IndexerField.ANALYZED_NOT_STORED );
 
     public static final IndexerField FLD_PACKAGING = new IndexerField( MAVEN.PACKAGING, IndexerFieldVersion.V1, "p",
-        "Artifact Packaging (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "Artifact Packaging (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_EXTENSION = new IndexerField( MAVEN.EXTENSION, IndexerFieldVersion.V1, "e",
-        "Artifact extension (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "Artifact extension (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_CLASSIFIER = new IndexerField( MAVEN.CLASSIFIER, IndexerFieldVersion.V1, "l",
-        "Artifact classifier (as keyword)", Store.NO, Index.NOT_ANALYZED );
+        "Artifact classifier (as keyword)", IndexerField.KEYWORD_NOT_STORED );
 
     public static final IndexerField FLD_NAME = new IndexerField( MAVEN.NAME, IndexerFieldVersion.V1, "n",
-        "Artifact name (tokenized, stored)", Store.YES, Index.ANALYZED );
+        "Artifact name (tokenized, stored)", IndexerField.ANALYZED_STORED );
 
     public static final IndexerField FLD_DESCRIPTION = new IndexerField( MAVEN.DESCRIPTION, IndexerFieldVersion.V1,
-        "d", "Artifact description (tokenized, stored)", Store.YES, Index.ANALYZED );
+        "d", "Artifact description (tokenized, stored)", IndexerField.ANALYZED_STORED );
 
     public static final IndexerField FLD_LAST_MODIFIED = new IndexerField( MAVEN.LAST_MODIFIED, IndexerFieldVersion.V1,
-        "m", "Artifact last modified (not indexed, stored)", Store.YES, Index.NO );
+        "m", "Artifact last modified (not indexed, stored)", StoredField.TYPE );
 
     public static final IndexerField FLD_SHA1 = new IndexerField( MAVEN.SHA1, IndexerFieldVersion.V1, "1",
-        "Artifact SHA1 checksum (as keyword, stored)", Store.YES, Index.NOT_ANALYZED );
+        "Artifact SHA1 checksum (as keyword, stored)", IndexerField.KEYWORD_STORED );
 
     private Locator jl = new JavadocLocator();
 
@@ -310,18 +309,16 @@ public class MinimalArtifactInfoIndexCreator
         // legacy!
         if ( ai.getPrefix() != null )
         {
-            doc.add( new Field( ArtifactInfo.PLUGIN_PREFIX, ai.getPrefix(), Field.Store.YES,
-                                Field.Index.NOT_ANALYZED ) );
+            doc.add( new Field( ArtifactInfo.PLUGIN_PREFIX, ai.getPrefix(), IndexerField.KEYWORD_STORED ) );
         }
 
         if ( ai.getGoals() != null )
         {
-            doc.add( new Field( ArtifactInfo.PLUGIN_GOALS, ArtifactInfo.lst2str( ai.getGoals() ), Field.Store.YES,
-                Field.Index.NO ) );
+            doc.add( new StoredField( ArtifactInfo.PLUGIN_GOALS, ArtifactInfo.lst2str( ai.getGoals() ) ) );
         }
 
         doc.removeField( ArtifactInfo.GROUP_ID );
-        doc.add( new Field( ArtifactInfo.GROUP_ID, ai.getGroupId(), Field.Store.NO, Field.Index.NOT_ANALYZED ) );
+        doc.add( new Field( ArtifactInfo.GROUP_ID, ai.getGroupId(), IndexerField.KEYWORD_NOT_STORED ) );
     }
 
     public boolean updateArtifactInfo( Document doc, ArtifactInfo ai )
diff --git a/indexer-core/src/main/java/org/apache/maven/index/creator/OsgiArtifactIndexCreator.java b/indexer-core/src/main/java/org/apache/maven/index/creator/OsgiArtifactIndexCreator.java
index ed06d0b..559d2da 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/creator/OsgiArtifactIndexCreator.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/creator/OsgiArtifactIndexCreator.java
@@ -23,7 +23,6 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.IndexerField;
@@ -72,95 +71,95 @@ public class OsgiArtifactIndexCreator
 
     public static final IndexerField FLD_SHA256 =
         new IndexerField( OSGI.SHA256, IndexerFieldVersion.V4, "sha256", "SHA-256 (not analyzed, stored)",
-                          Field.Store.YES, Field.Index.NOT_ANALYZED );
+                          IndexerField.KEYWORD_STORED );
 
     private static final String BSN = "Bundle-SymbolicName";
 
     public static final IndexerField FLD_BUNDLE_SYMBOLIC_NAME =
         new IndexerField( OSGI.SYMBOLIC_NAME, IndexerFieldVersion.V4, BSN, "Bundle-SymbolicName (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BV = "Bundle-Version";
 
     public static final IndexerField FLD_BUNDLE_VERSION =
-        new IndexerField( OSGI.VERSION, IndexerFieldVersion.V4, BV, "Bundle-Version (indexed, stored)", Field.Store.YES,
-                          Field.Index.ANALYZED );
+        new IndexerField( OSGI.VERSION, IndexerFieldVersion.V4, BV, "Bundle-Version (indexed, stored)",
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BEP = "Export-Package";
 
     public static final IndexerField FLD_BUNDLE_EXPORT_PACKAGE =
         new IndexerField( OSGI.EXPORT_PACKAGE, IndexerFieldVersion.V4, BEP, "Export-Package (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     @Deprecated
     private static final String BES = "Export-Service";
     @Deprecated
     public static final IndexerField FLD_BUNDLE_EXPORT_SERVIVE =
         new IndexerField( OSGI.EXPORT_SERVICE, IndexerFieldVersion.V4, BES, "Export-Service (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BD = "Bundle-Description";
 
     public static final IndexerField FLD_BUNDLE_DESCRIPTION =
         new IndexerField( OSGI.DESCRIPTION, IndexerFieldVersion.V4, BD, "Bundle-Description (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BN = "Bundle-Name";
 
     public static final IndexerField FLD_BUNDLE_NAME =
-        new IndexerField( OSGI.NAME, IndexerFieldVersion.V4, BN, "Bundle-Name (indexed, stored)", Field.Store.YES,
-                          Field.Index.ANALYZED );
+        new IndexerField( OSGI.NAME, IndexerFieldVersion.V4, BN, "Bundle-Name (indexed, stored)",
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BL = "Bundle-License";
 
     public static final IndexerField FLD_BUNDLE_LICENSE =
-        new IndexerField( OSGI.LICENSE, IndexerFieldVersion.V4, BL, "Bundle-License (indexed, stored)", Field.Store.YES,
-                          Field.Index.ANALYZED );
+        new IndexerField( OSGI.LICENSE, IndexerFieldVersion.V4, BL, "Bundle-License (indexed, stored)",
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BDU = "Bundle-DocURL";
 
     public static final IndexerField FLD_BUNDLE_DOCURL =
-        new IndexerField( OSGI.DOCURL, IndexerFieldVersion.V4, BDU, "Bundle-DocURL (indexed, stored)", Field.Store.YES,
-                          Field.Index.ANALYZED );
+        new IndexerField( OSGI.DOCURL, IndexerFieldVersion.V4, BDU, "Bundle-DocURL (indexed, stored)",
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BIP = "Import-Package";
 
     public static final IndexerField FLD_BUNDLE_IMPORT_PACKAGE =
         new IndexerField( OSGI.IMPORT_PACKAGE, IndexerFieldVersion.V4, BIP, "Import-Package (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
 
     private static final String BRB = "Require-Bundle";
 
     public static final IndexerField FLD_BUNDLE_REQUIRE_BUNDLE =
         new IndexerField( OSGI.REQUIRE_BUNDLE, IndexerFieldVersion.V4, BRB, "Require-Bundle (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     private static final String PROVIDE_CAPABILITY = "Provide-Capability";
 
     public static final IndexerField FLD_BUNDLE_PROVIDE_CAPABILITY =
         new IndexerField( OSGI.PROVIDE_CAPABILITY, IndexerFieldVersion.V4, PROVIDE_CAPABILITY,
-                          "Provide-Capability (indexed, stored)", Field.Store.YES, Field.Index.ANALYZED );
+                          "Provide-Capability (indexed, stored)", IndexerField.ANALYZED_STORED );
 
     private static final String REQUIRE_CAPABILITY = "Require-Capability";
 
     public static final IndexerField FLD_BUNDLE_REQUIRE_CAPABILITY =
         new IndexerField( OSGI.REQUIRE_CAPABILITY, IndexerFieldVersion.V4, REQUIRE_CAPABILITY,
-                          "Require-Capability (indexed, stored)", Field.Store.YES, Field.Index.ANALYZED );
+                          "Require-Capability (indexed, stored)", IndexerField.ANALYZED_STORED );
 
     private static final String FRAGMENT_HOST = "Fragment-Host";
 
     public static final IndexerField FLD_BUNDLE_FRAGMENT_HOST =
         new IndexerField( OSGI.FRAGMENT_HOST, IndexerFieldVersion.V4, FRAGMENT_HOST, "Fragment-Host (indexed, stored)",
-                          Field.Store.YES, Field.Index.ANALYZED );
+                          IndexerField.ANALYZED_STORED );
 
     private static final String BUNDLE_REQUIRED_EXECUTION_ENVIRONMENT = "Bundle-RequiredExecutionEnvironment";
 
     public static final IndexerField FLD_BUNDLE_REQUIRED_EXECUTION_ENVIRONMENT =
         new IndexerField( OSGI.BUNDLE_REQUIRED_EXECUTION_ENVIRONMENT, IndexerFieldVersion.V4,
                           BUNDLE_REQUIRED_EXECUTION_ENVIRONMENT,
-                          "Bundle-RequiredExecutionEnvironment (indexed, stored)", Field.Store.YES,
-                          Field.Index.ANALYZED );
+                          "Bundle-RequiredExecutionEnvironment (indexed, stored)",
+                          IndexerField.ANALYZED_STORED );
 
 
     public Collection<IndexerField> getIndexerFields()
diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
index 67f823d..c5f1d71 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
@@ -34,8 +34,8 @@ import java.util.LinkedHashSet;
 import java.util.Set;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.document.Field.Index;
-import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.FieldType;
+import org.apache.lucene.index.IndexOptions;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.context.IndexUtils;
@@ -181,23 +181,20 @@ public class IndexDataReader
     {
         int flags = dis.read();
 
-        Index index = Index.NO;
+        FieldType fieldType = new FieldType();
         if ( ( flags & IndexDataWriter.F_INDEXED ) > 0 )
         {
-            boolean isTokenized = ( flags & IndexDataWriter.F_TOKENIZED ) > 0;
-            index = isTokenized ? Index.ANALYZED : Index.NOT_ANALYZED;
-        }
-
-        Store store = Store.NO;
-        if ( ( flags & IndexDataWriter.F_STORED ) > 0 )
-        {
-            store = Store.YES;
+            boolean tokenized = ( flags & IndexDataWriter.F_TOKENIZED ) > 0;
+            fieldType.setTokenized( tokenized );
+            fieldType.setOmitNorms( !tokenized );
+            fieldType.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS );
         }
+        fieldType.setStored( ( flags & IndexDataWriter.F_STORED ) > 0 );
 
         String name = dis.readUTF();
         String value = readUTF( dis );
 
-        return new Field( name, value, store, index );
+        return new Field( name, value, fieldType );
     }
 
     private static String readUTF( DataInput in )
diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
index 979474d..11550bd 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
@@ -31,14 +31,14 @@ import java.util.List;
 import java.util.Set;
 import java.util.zip.GZIPOutputStream;
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field.Store;
-import org.apache.lucene.document.StringField;
+import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexOptions;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.util.Bits;
 import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.IndexerField;
 import org.apache.maven.index.context.DefaultIndexingContext;
 import org.apache.maven.index.context.IndexingContext;
 
@@ -122,18 +122,19 @@ public class IndexDataWriter
     {
         {
             List<IndexableField> allGroupsFields = new ArrayList<>( 2 );
-            allGroupsFields.add( new StringField( ArtifactInfo.ALL_GROUPS, ArtifactInfo.ALL_GROUPS_VALUE, Store.YES ) );
-            allGroupsFields.add( new StringField( ArtifactInfo.ALL_GROUPS_LIST, ArtifactInfo.lst2str( allGroups ),
-                                                  Store.YES ) );
+            allGroupsFields.add( new Field( ArtifactInfo.ALL_GROUPS, ArtifactInfo.ALL_GROUPS_VALUE,
+                                            IndexerField.KEYWORD_STORED ) );
+            allGroupsFields.add( new Field( ArtifactInfo.ALL_GROUPS_LIST, ArtifactInfo.lst2str( allGroups ),
+                                            IndexerField.KEYWORD_STORED ) );
             writeDocumentFields( allGroupsFields );
         }
 
         {
             List<IndexableField> rootGroupsFields = new ArrayList<>( 2 );
-            rootGroupsFields.add( new StringField( ArtifactInfo.ROOT_GROUPS, ArtifactInfo.ROOT_GROUPS_VALUE,
-                                                   Store.YES ) );
-            rootGroupsFields.add( new StringField( ArtifactInfo.ROOT_GROUPS_LIST, ArtifactInfo.lst2str( rootGroups ),
-                                                   Store.YES ) );
+            rootGroupsFields.add( new Field( ArtifactInfo.ROOT_GROUPS, ArtifactInfo.ROOT_GROUPS_VALUE,
+                                             IndexerField.KEYWORD_STORED ) );
+            rootGroupsFields.add( new Field( ArtifactInfo.ROOT_GROUPS_LIST, ArtifactInfo.lst2str( rootGroups ),
+                                             IndexerField.KEYWORD_STORED ) );
             writeDocumentFields( rootGroupsFields );
         }
     }