Hi
We have a long-standing index with some mandatory fields and some optional fields that has been through multiple lucene upgrades without a full rebuild and on testing out an upgrade from version 8.11.0 to 9.0.0, when open an IndexWriter we are hitting the exception Exception in thread "main" java.lang.IllegalArgumentException: cannot change field "language" from index options=NONE to inconsistent index options=DOCS at org.apache.lucene.index.FieldInfo.verifySameIndexOptions(FieldInfo.java:245) at org.apache.lucene.index.FieldInfos$FieldNumbers.verifySameSchema(FieldInfos.java:421) at org.apache.lucene.index.FieldInfos$FieldNumbers.addOrGet(FieldInfos.java:357) at org.apache.lucene.index.IndexWriter.getFieldNumberMap(IndexWriter.java:1263) at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1116) Where language is one of our optional fields. Presumably this is at least somewhat related to "Index options can no longer be changed dynamically" as mentioned at https://lucene.apache.org/core/9_0_0/MIGRATE.html although it fails before our code attempts to update the index, and we are not trying to change any index options. Adding some displays to IndexWriter and FieldInfos and logging rather than throwing the exception I see language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=DOCS language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=NONE language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS language curr=NONE, other=DOCS where there is one line per segment. It logs the exception whenever other=DOCS. Subset with segment info: segment _x8(8.2.0):c31753/-1:[diagnostics={timestamp=1565623850605, lucene.version=8.2.0, java.vm.version=11.0.3+7, java.version=11.0.3, mergeMaxNumSegments=-1, os.version=3.1.0-1.2-desktop, java.vendor=AdoptOpenJDK, source=merge, os.arch=amd64, mergeFactor=10, java.runtime.version=11.0.3+7, os=Linux}]:[attributes={Lucene50StoredFieldsFormat.mode=BEST_SPEED}] language curr=NONE, other=NONE segment _y9(8.7.0):c43531/-1:[diagnostics={timestamp=1604597581562, lucene.version=8.7.0, java.vm.version=11.0.3+7, java.version=11.0.3, mergeMaxNumSegments=-1, os.version=3.1.0-1.2-desktop, java.vendor=AdoptOpenJDK, source=merge, os.arch=amd64, mergeFactor=10, java.runtime.version=11.0.3+7, os=Linux}]:[attributes={Lucene87StoredFieldsFormat.mode=BEST_SPEED}] language curr=NONE, other=DOCS NOT throwing java.lang.IllegalArgumentException: cannot change field "language" from index options=NONE to inconsistent index options=DOCS Some variation on an old-fashioned not set versus not present bug perhaps? -- Ian.