Lucene8:フィールドタイプを変更したらインデックスの再作成が必要



以下のようなエラーが発生した。

Exception in thread "main" java.lang.IllegalArgumentException: cannot change field "fieldName" from index options=DOCS to inconsistent index options=DOCS_AND_FREQS_AND_POSITIONS
    at org.apache.lucene.index.FieldInfos$FieldNumbers.verifyConsistent(FieldInfos.java:375)
    at org.apache.lucene.index.FieldInfos$FieldNumbers.setIndexOptions(FieldInfos.java:440)
    at org.apache.lucene.index.DefaultIndexingChain.initIndexOptions(DefaultIndexingChain.java:701)
    at org.apache.lucene.index.DefaultIndexingChain.getOrAddField(DefaultIndexingChain.java:664)
    at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:440)
    at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:406)
    at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:250)
    at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:495)
    at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1594)
    at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1213)

単純にフィールドタイプを変更して、既存のインデックスにそのまま継続して書き込もうとしたかららしい。フィールドタイプを変更したら、すべて再インデックスしなければならないようだ。これは考えてみれば当然だろう。

生のLuceneだけではなく、Solr等でも発生するらしい。