>>>>>>>>>>>> Code: SegmentMerger.java patch >>>>>>>>>>>> private void mergeNorms() throws IOException { for (int i = 0; i < fieldInfos.size(); i++) { FieldInfo fi = fieldInfos.fieldInfo(i); if (fi.isIndexed) { OutputStream output = directory.createFile(segment + ".f" + i); try { for (int j = 0; j < readers.size(); j++) { IndexReader reader = (IndexReader) readers.elementAt(j); //byte[] input = reader.norms(fi.name); int maxDoc = reader.maxDoc(); byte[] input = new byte[maxDoc]; reader.norms(fi.name, input, 0); for (int k = 0; k < maxDoc; k++) { byte norm = input != null ? input[k] : (byte) 0; if (!reader.isDeleted(k)) { output.writeByte(norm); } } } } finally { output.close(); } } } } >>>>>>>>>>>> Inputs >>>>>>>>>>>> 7.2G index0 7.0G index1 5.8G index3 5.8G index4 4.2G index5 5.3G index6 5.8G index7 6.0G index8 4.8G index9 52G . >>>>>>>>>>>> Tests >>>>>>>>>>>> #1 java -Xms700M -Xmx700M MergeTest index0 index1 result -> 13G success #2 java -Xms700M -Xmx700M MergeTest index0 index1 index3 result -> 18G success #3 java -Xms700M -Xmx700M MergeTest index0 index1 index3 index4 result -> 24G success #4 java -Xms700M -Xmx700M MergeTest index0 index1 index4 index5 result -> 22G success #5 java -Xms700M -Xmx700M MergeTest index0 index1 index3 index4 index5 result -> 27G success #6 java -Xms700M -Xmx700M MergeTest index0 index1 index3 index4 index5 index6 result -> 32G success #7 java -Xms700M -Xmx700M MergeTest index0 index1 index3 index4 index5 index6 index7 result -> 37G success #8 java -Xms700M -Xmx700M MergeTest index0 index1 index3 index4 index5 index6 index7 index8 result -> 43G success