)]}'
{
  "log": [
    {
      "commit": "330ee57b167ef0be2935cfeac00f532297a55f97",
      "tree": "3c0c06f1373b195c3b83596a4d1395b7c4f689e2",
      "parents": [
        "bc0d7097dc765aebfe43ccd9f41f4e702fc87d28"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Wed Oct 21 17:01:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 16:01:45 2026 +0100"
      },
      "message": "SegmentInfos: Ensure IOExceptions are not hidden behind CorruptSegmentInfoException (#16788)\n\nThis is a follow-up for #16476\n\nThe previous change hid every IOException behind a CorruptSegmentInfoException.\nThis could also result in transient errors being treated like a corruption, so we handle\nspecific issues (EOFException, FileNotFoundException) instead and propagate general\nIOExceptions to the caller."
    },
    {
      "commit": "bc0d7097dc765aebfe43ccd9f41f4e702fc87d28",
      "tree": "8729a41c445d82536d32f4e3ee9c604cc797b5c3",
      "parents": [
        "26b775887c82daa0f37d7d241a7e6dc9d8c9186b"
      ],
      "author": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Tue Oct 20 14:16:41 2026 -0700"
      },
      "committer": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Tue Oct 20 14:16:41 2026 -0700"
      },
      "message": "Add branch protection for branch_10_6 (and missed branches)\n"
    },
    {
      "commit": "26b775887c82daa0f37d7d241a7e6dc9d8c9186b",
      "tree": "ada61e5631d22d14023ae1d83da9ea129ff1b57e",
      "parents": [
        "0ff1bf1534bca9824649dd60f2add26f73aa4d2b"
      ],
      "author": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Tue Oct 20 12:01:46 2026 -0700"
      },
      "committer": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Tue Oct 20 12:01:46 2026 -0700"
      },
      "message": "Move changelog entry from 11.0.0 to 10.6.0 (#16739)\n"
    },
    {
      "commit": "0ff1bf1534bca9824649dd60f2add26f73aa4d2b",
      "tree": "adb6d41542fd0733d90b9fc2c19772295e7a2f18",
      "parents": [
        "12d316cb85463e4bd0bce550077216a7c5dbb9b1"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "ltjin@amazon.com",
        "time": "Wed Oct 21 02:47:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:47:22 2026 -0700"
      },
      "message": "Compare live vector counts when picking the HNSW merge base graph (#16739)\n\nIncrementalHnswGraphMerger#addReader compared a candidate\u0027s live vector\ncount against the current base\u0027s total node count (graphSize), which\nincludes deleted nodes since GITHUB#15003 admitted graphs with deletes as\nthe base. A graph with deletions could therefore stay the base over a\nlarger deletion-free graph, depending on reader order.\n\nTrack the live count separately in GraphReader and compare live against\nlive; graphSize stays the total node count used for array sizing."
    },
    {
      "commit": "12d316cb85463e4bd0bce550077216a7c5dbb9b1",
      "tree": "17e4ee29e1868a54a02290bb7fb791852a3d8d3c",
      "parents": [
        "8a8ef488218405ee18ba9803c3ac1779ef74093a"
      ],
      "author": {
        "name": "Costin Leau",
        "email": "costin@users.noreply.github.com",
        "time": "Sun Oct 18 22:14:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 07:14:35 2026 +0200"
      },
      "message": "Make BitSetIterator#docIDRunEnd linear (#16849)\n\nDenseConjunctionBulkScorer calls docIDRunEnd() once per 4096-doc\nwindow when the segment has deletions or another clause does not fully\nmatch the window. Since #16072, BitSetIterator answered every call by\nscanning to the next clear bit, so a long run of set bits (e.g. a\ncached filter matching the whole segment) costs O(run^2 / 4096) word\nreads per query.\n\nThe PR remembers the known end of the current run to resume the scan\nfrom there and cap each scan at 2^16 bits past the current doc, so\nthat callers that only consume a prefix, do not have to scan all of it."
    },
    {
      "commit": "8a8ef488218405ee18ba9803c3ac1779ef74093a",
      "tree": "f3605286ddbbd56c8c84b2575d699587b3d2b1cc",
      "parents": [
        "2dc88481bdc79ca2352a84c60a7afde018b2b919"
      ],
      "author": {
        "name": "goankur",
        "email": "47429106+goankur@users.noreply.github.com",
        "time": "Fri Oct 16 09:37:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 09:37:43 2026 -0700"
      },
      "message": "Page-align vector data for all encodings (#16771)"
    },
    {
      "commit": "2dc88481bdc79ca2352a84c60a7afde018b2b919",
      "tree": "4a418944aa41fd258fd8623d926e0a02d44dc00d",
      "parents": [
        "468adaf064dac3e8e2dfca71d4c95d45de57673b"
      ],
      "author": {
        "name": "Simon Cooper",
        "email": "simon.cooper@elastic.co",
        "time": "Fri Oct 16 14:33:17 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 14:33:17 2026 +0100"
      },
      "message": "Ensure the test dedup vectors are only normalized once (#16854)"
    },
    {
      "commit": "468adaf064dac3e8e2dfca71d4c95d45de57673b",
      "tree": "c7748ada8fcdf02054a7fdbeb8c278d8dbde61df",
      "parents": [
        "8476457b8752be2fd8094eaf5cd9bf0cea9594ae"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Fri Oct 16 12:18:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 11:18:51 2026 +0100"
      },
      "message": "Cleanup: Remove unused BitsSlice class (#16852)"
    },
    {
      "commit": "8476457b8752be2fd8094eaf5cd9bf0cea9594ae",
      "tree": "1d5129e0f11d3628cb6556472f0ff0257f67c5b7",
      "parents": [
        "bc9598bdfb81072395821331ff40e153e6c26b1c"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Thu Oct 15 15:23:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 15:23:00 2026 +0200"
      },
      "message": "Lower min supported major version to 9 in main (#16741)\n\nAfter merging #15012 to main, Lucene no longer strictly requires bumping the minimum supported major version when releasing a new major. That will still be necessary once breaking changes are introduced that require reindexing, but can be avoided when not necessary. This was discussed in the corresponding issue at #13797, yet while the change providing the infra for this important change was merged to main, the minimum supported version in main (future 11) remained 10. \n\nSeveral people asked if we could lower the minimum supported major version to 9 in main, so that Lucene 11 would be able to support reading and writing indices created by Lucene 9.x and effectively not require reindexing. I find that this would be a great improvement and would help users more quickly and less painfully migrate to Lucene 11 once it comes out. Effectively Lucene 11 would come with the minimum JDK bump requirement and breaking API changes, but no min major version bump.\n\nI did some research on the topic and this is possible today in main as no breaking changes were made at the codecs level. In practice, there does not seem to be any technical reason why we should prevent `IndexWriter` from opening indices created in 9.x in Lucene 11. From a cost and maintenance perspective, 9.x codecs are already in the codebase and would be shipped with Lucene 11 anyways, to allow users to read such indices using the existing expert API `DirectoryReader#open(IndexCommit commit, int minSupportedMajorVersion)`. \n\n\nIt is a significant policy change that may cause confusion, as the compatibility policy will vary across major versions. Like we discussed in previous threads, reindexing will still be required in future major versions once necessary.\n\nThe commits consists of the following steps:\n\n- Adjust `Version.MIN_SUPPORTED_MAJOR` to 9 (was 10)\n- Adjust `IndexWriterConfig#setIndexCreatedVersionMajor` version checks (leftover LATEST.major - 1 check)\n- Remove binary support as the minimum binary supported version now aligns with minimum supported major for writing\n- Reinstate all the 9.x version constants as deprecated. \n- Tests: Remove all 9.x versions from `unsupported_versions.txt`\n- Tests: Ensure all 9.x versions are covered in `versions.txt`\n- Tests: Rename all the test 9.x zip files, removing the unsupported prefix from their file name\n- Adjust test expectations: `TestIndexWriter`, `TestMoreTermsBackwardsCompatibility`, `TestMinSupportedMajorBackwardsCompatibility`, `TestEmptyIndexBackwardsCompatibility`, `TestDVUpdateBackwardsCompatibility`, `TestBasicBackwardsCompatibility`, `TestAncientIndicesCompatibility`, `BackwardsCompatibilityTestBase`\n- Remove `TestBinaryBackwardsCompatibility`"
    },
    {
      "commit": "bc9598bdfb81072395821331ff40e153e6c26b1c",
      "tree": "6946ba5c77157410edc75729839e848bf8ef11e0",
      "parents": [
        "5cdce7bfce44c5a41064c9402c48f721ab3f1bff"
      ],
      "author": {
        "name": "Zhou Hui",
        "email": "vsop_479@163.com",
        "time": "Thu Oct 15 09:48:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 09:48:58 2026 +0800"
      },
      "message": "Tidy. (#16842)"
    },
    {
      "commit": "5cdce7bfce44c5a41064c9402c48f721ab3f1bff",
      "tree": "129f5d17b4dfec5e3878d1f222f63dae5be5de7b",
      "parents": [
        "af9d10f5f1d07cdad4e14c4ee5a899760e5bb571"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Wed Oct 14 21:57:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 21:57:43 2026 +0200"
      },
      "message": "Cleanup: Remove unused ForwardBytesReader class (#16837)"
    },
    {
      "commit": "af9d10f5f1d07cdad4e14c4ee5a899760e5bb571",
      "tree": "339419cb2843fa71c7ca1445b65b9e31edb847c6",
      "parents": [
        "2a22e97184a2b40df8ab6ff6eccb01e66b4cf026"
      ],
      "author": {
        "name": "Pranshu Shukla",
        "email": "55992439+Pranshu-S@users.noreply.github.com",
        "time": "Thu Oct 15 00:53:09 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 15:23:09 2026 -0400"
      },
      "message": "Add scalar quantization support for FLOAT16 vectors in the dedup KNN codec (#16710)"
    },
    {
      "commit": "2a22e97184a2b40df8ab6ff6eccb01e66b4cf026",
      "tree": "4342933712580298e9a4e09eb2d0d588f3d874d6",
      "parents": [
        "63df54ad867237b4f098e3a230a0707162778d7e"
      ],
      "author": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Wed Oct 14 18:57:06 2026 +0100"
      },
      "committer": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Wed Oct 14 18:57:06 2026 +0100"
      },
      "message": "Add next minor version 10.7.0\n"
    },
    {
      "commit": "63df54ad867237b4f098e3a230a0707162778d7e",
      "tree": "c8b3f0013f794e7d61e89dc8d04a4ea456a3a448",
      "parents": [
        "17c80dc1c326a1cb24efac38f89c589e977d441d"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "ltjin@amazon.com",
        "time": "Thu Oct 15 01:19:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:19:06 2026 -0400"
      },
      "message": "Add a JMH benchmark for byte vector kernels after all variants are compiled (#16831)\n\nJMH forks a new JVM for every benchmark, so VectorUtilBenchmark measures\neach byte kernel in a JVM where no other variant has run, and it did not\nshow #16807. VectorUtilMixingBenchmark first runs every signed and\nunsigned dot product and square distance long enough for C2 to compile\nit, then measures each kernel on its own (pollute\u003dall), and compares that\nwith a fresh JVM (pollute\u003dnone). A combined method calls each kernel\nthrough its own DONT_INLINE helper, so that each kernel has its own\ncompilation as behind the vector scorers, and the result does not depend\non how many Vector API kernels C2 can inline into one benchmark method."
    },
    {
      "commit": "17c80dc1c326a1cb24efac38f89c589e977d441d",
      "tree": "9e31491f3c837f76190c3e0a461ba98bfad716f1",
      "parents": [
        "1169cd2007d37c1e5354fdccf9aa7e4eef93d21a"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Oct 14 16:46:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 16:46:12 2026 +0200"
      },
      "message": "Remove supportsConcurrency constructors (#16833)\n\nTopScoreDocCollectorManager and TopFieldCollectorManager have a deprecated\nconstructor that takes the supportsConcurrency boolean flag as last argument.\n\nThis has been deprecated and effectively no-op since 10.1.\n\nRelates to #13977"
    },
    {
      "commit": "1169cd2007d37c1e5354fdccf9aa7e4eef93d21a",
      "tree": "76bead360ce04f35b2d9af6f4e493765d1d541d9",
      "parents": [
        "2eb462541b1ccc14b78bee9323beccca608e834c"
      ],
      "author": {
        "name": "kkewwei",
        "email": "kewei.11@bytedance.com",
        "time": "Wed Oct 14 17:46:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 17:46:18 2026 +0800"
      },
      "message": "Upgrade DocIdSetBuilder to use FixedBitSet eagerly once exceeding the threshold (#16089)"
    },
    {
      "commit": "2eb462541b1ccc14b78bee9323beccca608e834c",
      "tree": "ddf3a346a410746203d432ea0e6f1bcb0de47923",
      "parents": [
        "d8d5f31ae7612391adf8a3663ff5ce92e4e32023"
      ],
      "author": {
        "name": "Alan Woodward",
        "email": "romseygeek@apache.org",
        "time": "Tue Oct 13 22:17:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 22:17:29 2026 +0100"
      },
      "message": "Remove deprecated CharsRef UTF16-UTF8 Comparator (#16834)\n\nThis was only used in SynonymMap, so the implementation is\nmoved there and updated to use Character.codePointAt()."
    },
    {
      "commit": "d8d5f31ae7612391adf8a3663ff5ce92e4e32023",
      "tree": "eac7b779a82c71116671e1e5a224679fcd486595",
      "parents": [
        "5017142089af36058245f1b35d632e6ab4eb5f2d"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Tue Oct 13 13:03:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 13:03:16 2026 +0200"
      },
      "message": "Remove VectorValueSource and MultiValueSource (#16814)\n\nThese classes have fallen unused and unmantained."
    },
    {
      "commit": "5017142089af36058245f1b35d632e6ab4eb5f2d",
      "tree": "d72c1ef95622656bb555b042cffb5db8ad7557ea",
      "parents": [
        "94557355c650d7aa4ddbfb4a9c477279f3f4cc88"
      ],
      "author": {
        "name": "Alex Baranov",
        "email": "meskalito@gmail.com",
        "time": "Mon Oct 12 20:42:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 19:42:46 2026 +0000"
      },
      "message": "Fix performance bug which skipped cache optimization (early return in DirectoryTaxonomyReader#getBulkOrdinals) (#16783)\n\n* Fix the all-cached early return in DirectoryTaxonomyReader#getBulkOrdinals\n\n* Use the PR number in the CHANGES entry\n\n* Remove empty line whitespace from lucene/CHANGES.txt\n\n---------\n\nCo-authored-by: Alex Baranov \u003c21628+xande@users.noreply.github.com\u003e\nCo-authored-by: Michael McCandless \u003cmikemccand@apache.org\u003e"
    },
    {
      "commit": "94557355c650d7aa4ddbfb4a9c477279f3f4cc88",
      "tree": "5bea916b6a37514305278535201107e099fc7863",
      "parents": [
        "54c6dc8becd438ae4a429dbba0903b872b09eb19"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Mon Oct 12 22:57:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:57:17 2026 -0400"
      },
      "message": "Fix up to 150x slowdown of byte vector distances once both signed and uint8 variants have run (#16807)"
    },
    {
      "commit": "54c6dc8becd438ae4a429dbba0903b872b09eb19",
      "tree": "941577405d3071a2ecaf4557acf93a18cb2a33c3",
      "parents": [
        "9f3e5f4439d136ad2c1e304ea325c9012688c760"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Mon Oct 12 21:13:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 09:13:51 2026 -0400"
      },
      "message": "Fix the native function contract of NativeVectorUtilSupport: float lengths, byte cosine, l2normalize, symbol lookup (#16812)\n\n* Fix the native function contract of NativeVectorUtilSupport\n\nOnly dotProduct had a declared C signature, and a library implementing\nthe other functions the obvious way hit four problems:\n\n- the float functions received the byte size as their length, four\n  times the element count, so a C loop over the elements read past both\n  heap arrays (wrong scores, or a SIGSEGV);\n- byte cosine was bound with an int-returning descriptor, so its\n  fractional result was lost;\n- l2normalize ignored the native return value and could never throw for\n  a zero vector;\n- symbols had generic names and were also searched in the linker\u0027s\n  default lookup, so an unrelated library could supply them.\n\nA single length argument is now always the element count of the first\narray argument, which only changes the three float functions. Byte\ncosine returns float. Native l2normalize returns NULL for a zero vector\nand Java throws when throwOnZero is set. Symbols are prefixed with\n\"lucene_\" and looked up only in libraries loaded by Lucene\u0027s class\nloader. dotProduct.h now declares all 22 functions, and the example\nexports lucene_dotProduct.\n\n* Use line comments in dotProduct.h to satisfy eclint"
    },
    {
      "commit": "9f3e5f4439d136ad2c1e304ea325c9012688c760",
      "tree": "bb134a7e334b5072ccc9f9289df6796c57ba4840",
      "parents": [
        "f94888d85c129fdd71d27790164c613dfb617704"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Oct 12 08:09:18 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 08:09:18 2026 -0400"
      },
      "message": "ci: improve actions checks (#16808)\n\nRun the \"online\" checks for PRs/pushes that change .github/ itself. Add\na job for the ASF\u0027s allowlist checker. We\u0027ve had problems of outdated\nactions confusing everyone before, the failure message is not nice. This\naction can warn you of the problem in advance. The default parameters\nare used for now, to get started with it. It also only checks `main` for\nnow, for the same reason. We might want to extend to stable branch in\nthe future."
    },
    {
      "commit": "f94888d85c129fdd71d27790164c613dfb617704",
      "tree": "854f8181314dec0642aa67e2b0a4829048671543",
      "parents": [
        "18d5c42edba7d160e77709fd54f680751892a3dc"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Sun Oct 11 10:30:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 10:30:02 2026 +0200"
      },
      "message": "Merges read compound files through a mapping of their own (#16796)\n\nSince #16749 and #16684, a merge reads raw vectors and stored fields through a mapping it opens for itself, so the sequential access it advises does not replace the random access advised for searches. Inside a compound file this does not hold: the reader opens the inner file again through the compound reader, which slices the one mapping of the `.cfs` that searches read. The merge\u0027s advice lands on the pages searches read, and nothing restores it after the merge.\n\n`Lucene90CompoundReader` now opens inner files for a merge (an `IOContext` whose context is `MERGE`) through a second mapping of the compound file. The first merge open maps it, later merge opens share it, and it is closed with the reader. Like the mapping searches read, it is opened without advice, so each inner file is advised on its own region, from the context it was opened with. If the compound file is gone, merge opens fall back to the reader\u0027s mapping.\n\nOther opens are unchanged. A reader opened only for a merge maps the compound file once more in total.\n\n`BaseCompoundFormatTestCase#testManySubFiles` asserted one file handle per compound file. It now allows one more once an inner file is opened for a merge.\n\nTests:\n- `TestLucene90CompoundFormat`: merge opens share one mapping of their own, separate from the reader\u0027s, closed with the reader; the fallback when the file is gone; and, on `MMapDirectory`, searches keep reading the reader\u0027s mapping while a merge reads another.\n- `TestVectorsMergeReadAdvice#testACompoundMergeOpensItsOwnMapping`: a merge of two compound segments maps each source compound file once, without advice, and closes the mapping with the segment\u0027s reader.\n\nRelates #16749, #16769, #16684"
    },
    {
      "commit": "18d5c42edba7d160e77709fd54f680751892a3dc",
      "tree": "e0e5123b0ce1164d19d93ab526acdbd5b9fa5dbe",
      "parents": [
        "9d882c6c0074179c7a95339ea8fa9c8abcae9803"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Fri Oct 09 16:37:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 16:37:16 2026 +0200"
      },
      "message": "Tests: Fix assertRamBytesUsed when RoaringDocIdSet.AllDocIdSet is used (#16773)"
    },
    {
      "commit": "9d882c6c0074179c7a95339ea8fa9c8abcae9803",
      "tree": "3dc36c96e70c306c267c4a87c53cd16ff19ad94b",
      "parents": [
        "e8a04e4ab19d95bf2ea0a633cee554f54879e6d8"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Fri Oct 09 16:30:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 16:30:29 2026 +0200"
      },
      "message": "TestStoredFieldsMergeReadAdvice: Use default codec (#16802)"
    },
    {
      "commit": "e8a04e4ab19d95bf2ea0a633cee554f54879e6d8",
      "tree": "7e83b79a7660ab12ccbdbc49b4110437cafc832b",
      "parents": [
        "d150ba27d1192396a8a67a765bb2f05cf79375b0"
      ],
      "author": {
        "name": "Alexander Reelsen",
        "email": "alr@spinscale.de",
        "time": "Fri Oct 09 16:18:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 16:18:14 2026 +0200"
      },
      "message": "Tests: Use AtomicInteger to prevent races in BaseKnnVectorQueryTestCase (#16786)"
    },
    {
      "commit": "d150ba27d1192396a8a67a765bb2f05cf79375b0",
      "tree": "0228952b5e395113775db0e025e3e26a31e0980e",
      "parents": [
        "c177939f5eb0cfb079b9d416654be4f051cc55ae"
      ],
      "author": {
        "name": "Zhang Chao",
        "email": "80152403@qq.com",
        "time": "Fri Oct 09 20:08:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 20:08:43 2026 +0800"
      },
      "message": "Fix block-max support of DoubleValuesSource (#16697)\n\n1. advanceShallow advanced the skipper on every call, including when the target was still inside the current block, which may cause the skipper to move to the next block.\n\n2. getMaxScore,getMinScore only looked at level 0 of the skipper, including when upTo was beyond the current block, in which case the returned value only covers the current block, not the requested range."
    },
    {
      "commit": "c177939f5eb0cfb079b9d416654be4f051cc55ae",
      "tree": "456a0fb57f760655866ac90c6177c18c816d0f71",
      "parents": [
        "d8468fd93757116c11760bbdaad90c212ffa62f1"
      ],
      "author": {
        "name": "Eugene Rizhkov",
        "email": "yevgeny.rizhkov@elastic.co",
        "time": "Fri Oct 09 12:57:02 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 11:57:02 2026 +0200"
      },
      "message": "Use shallow size for all boxed primitives in RamUsageEstimator.sizeOfObject (#16743)\n\nRamUsageEstimator.sizeOfObject returns the shallow size for Integer and Long, but Boolean, Byte, Character, Short, Float and Double fall through to UNKNOWN_DEFAULT_RAM_BYTES_USED (256 bytes). These classes hold a single primitive field, so their shallow size is their whole retained size (16 or 24 bytes). A collection of boxed doubles is over-counted by about 10x as a result."
    },
    {
      "commit": "d8468fd93757116c11760bbdaad90c212ffa62f1",
      "tree": "7da37c62a55fa0d87f137e138e72d8b3b2d033d2",
      "parents": [
        "31c4511e591a29b6eba9062220a2da82ac28c026"
      ],
      "author": {
        "name": "Ethan Baker",
        "email": "1ethanbaker@gmail.com",
        "time": "Thu Oct 08 14:22:06 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 14:22:06 2026 -0400"
      },
      "message": "Parallelize the repair process for disconnected nodes during HNSW merge-re-use (#16627)"
    },
    {
      "commit": "31c4511e591a29b6eba9062220a2da82ac28c026",
      "tree": "0247f48d5be3472cd2e1161379570cf4e3ce4d7a",
      "parents": [
        "48a97520c26ffb9182b4feadcdb03dbdc77171cf"
      ],
      "author": {
        "name": "Pranshu Shukla",
        "email": "55992439+Pranshu-S@users.noreply.github.com",
        "time": "Thu Oct 08 23:43:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 14:13:16 2026 -0400"
      },
      "message": "Fix Lucene104ScalarQuantizedVectorsWriter to skip deleted docs when recomputing merge centroid (#16764)\n\nAlso fixes vector count used to decide whether to prepare query-side data for merging of vectors with asymmetric scalar quantization."
    },
    {
      "commit": "48a97520c26ffb9182b4feadcdb03dbdc77171cf",
      "tree": "2093062fcfa1ab1ea100bb79bcb9be923810c5d8",
      "parents": [
        "ccd61ff0356ca229542d6a51e63c85e79571c89e"
      ],
      "author": {
        "name": "kkewwei",
        "email": "kewei.11@bytedance.com",
        "time": "Fri Oct 09 00:16:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 17:16:28 2026 +0100"
      },
      "message": "Optimize MUST_NOT scoring based on required-clause selectivity (#16715)\n\nWhen a required clause is sparser than an exclusion clause, using \nReqExclBulkScorer can waste lots of time building its exclusion bitset\nagainst documents that would not be matched by the required clause\nin the first place.  For sufficiently sparse required clauses, we now\nfall back to using doc-by-doc scoring.\n\nIn addition, the exclusion scorer is always built with a maximum lead\ncost in the bulk scorer to avoid using scorers with slow intoBitSet\nimplementations."
    },
    {
      "commit": "ccd61ff0356ca229542d6a51e63c85e79571c89e",
      "tree": "706f50af2a6dd4a983db9eb94409de9c4559917b",
      "parents": [
        "d1f4b8243a21b5fe9189477489d8576ac99bc6e6"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Thu Oct 08 15:01:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 15:01:38 2026 +0200"
      },
      "message": "Write stored fields data sequentially, not reused (#16797)\n\nThe stored fields data file is read with `NoReuseHint`: at random by searches, and front to back by merges (#16684). Its writes said `NoReuseHint` but not how the file is written. They now also say `DataAccessHint.SEQUENTIAL`, so a directory sees on flush and merge writes the same hints it sees on reads, and can choose how to write a file that is streamed once and not read back, for example with direct I/O for merges.\n\nDirectories that ignore write hints are unaffected.\n\n`TestStoredFieldsMergeReadAdvice#testDataIsWrittenSequentiallyAndNotReused` checks the data file written by two flushes and a merge.\n\nRelates #16684"
    },
    {
      "commit": "d1f4b8243a21b5fe9189477489d8576ac99bc6e6",
      "tree": "2cf622524ca6b51f7250f7fb99e97761ef42aa21",
      "parents": [
        "a1f5eb7b6b46fe7b46e19b8c7cff49b750fca86b"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Wed Oct 07 17:30:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 17:30:20 2026 -0400"
      },
      "message": "ci: run checks-without-tests on highest supported java version too (#16789)\n\nThe gradle build supports a range of java versions. When a new java\nversion is released, there is usually some amount of work before\neverything \"really works\" on that version. For example spotless and\nother components that are tightly-coupled with the JDK.\n\nIt is a bit error-prone today since you have to run various workflows\nlocally to know you have it really correct. If we test the upper-bound\n(newest supported version) too, the CI can help us.\n\nThis will cost a few minutes per build (cpu time, not wall-clock), but\nit can give us more confidence when reviewing dependabot PRs, or bumping\nJDK versions."
    },
    {
      "commit": "a1f5eb7b6b46fe7b46e19b8c7cff49b750fca86b",
      "tree": "c503a4dd6541cda49d3652db46d50c9c38ec3457",
      "parents": [
        "120b3bc18dac2cacc8561e555ec304398ef53da3"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Oct 07 17:03:55 2026 +0200"
      },
      "committer": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Oct 07 17:03:55 2026 +0200"
      },
      "message": "Move #16686 entry to 11.0 section\n"
    },
    {
      "commit": "120b3bc18dac2cacc8561e555ec304398ef53da3",
      "tree": "1fb72b0b4e1a60eac676ee1b0b21f6e1933282a3",
      "parents": [
        "8829665100dc9650afdcdbe8172757aeb78c3bff"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Oct 07 16:30:28 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 16:30:28 2026 +0200"
      },
      "message": "Expand migrate guide (#16756)\n\nI went through the migrate guide and added some changes that I thought deserve a mention.\n\nI also added some code snippets where helpful and clarified the complement regexp syntax entry: it was deprecated in Lucene 10 and remove in Lucene 11."
    },
    {
      "commit": "8829665100dc9650afdcdbe8172757aeb78c3bff",
      "tree": "2079530629d5407fc8ea6f4c635a088d3157dc81",
      "parents": [
        "dba8f5e9534eedeccb82ef1e2a485bb91b53c8cc"
      ],
      "author": {
        "name": "Pulkit Gupta",
        "email": "36265543+Pulkitg64@users.noreply.github.com",
        "time": "Wed Oct 07 07:58:47 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 07:58:47 2026 -0400"
      },
      "message": "Update CHANGES.txt with fp16 re-ranking and prefetch PR (#16785)"
    },
    {
      "commit": "dba8f5e9534eedeccb82ef1e2a485bb91b53c8cc",
      "tree": "4bc448774c396c27c75444ed69745b908223f75b",
      "parents": [
        "3e4a7a02ce06a4f6ae796de79827d53202c65336"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Wed Oct 07 13:12:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 13:12:14 2026 +0200"
      },
      "message": "Fix the vectors merge mapping from #16749, and map again for Faiss merges (#16769)\n\n#16749 made `Lucene99FlatVectorsReader.getMergeInstance()` map the raw vectors again for a merge, instead of changing the advice on the mapping searches read at random. This fixes a few things in that change and covers a reader it missed.\n\n**Map again only when searches read at random.** A merge maps the file again only when searches read it at random and the reader was not opened by a merge itself. Otherwise the search mapping carries no advice a merge reading front to back would suffer from, so a flat format used without a graph keeps reading through the mapping it has.\n\n**Keep the caller\u0027s hints.** The merge mapping was built from scratch. It now keeps what the caller said about the file and only replaces the access hint with `SEQUENTIAL`. Reuse stays the format\u0027s call: `Lucene104ScalarQuantizedVectorsFormat` marks its raw vectors `NoReuse` and the merge mapping keeps it; `Lucene99HnswVectorsFormat` doesn\u0027t, and neither does the merge mapping.\n\n**Release once per merge instance, outside the lock.** Finishing the original reader, or finishing a merge instance twice, released another instance\u0027s hold on the mapping. Each merge instance now gives it back once, and the last one closes it outside the lock.\n\n**Faiss.** `FaissKnnVectorsReader` returned `this` from `getMergeInstance()`, so the raw reader\u0027s merge instance was never asked for. It now hands merges a reader over the raw reader\u0027s merge instance and passes `finishMerge()` on. The Faiss index file is not read by a merge.\n\n`TestVectorsMergeReadAdvice` covers the merge mapping for a graph over raw vectors and for the scalar quantized format, the two cases that must not map again, the caller\u0027s hints surviving, sharing between concurrent merge instances, release-once, and close while a merge is open."
    },
    {
      "commit": "3e4a7a02ce06a4f6ae796de79827d53202c65336",
      "tree": "bb65c25297847db9470d0846df2a53d6efe5dc26",
      "parents": [
        "234e74585b3d1ad66496abdc40b85046d0b554a6"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Oct 07 12:18:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 12:18:29 2026 +0200"
      },
      "message": "Remove TermGroupFacetCollector and GroupFacetCollector (#16779)\n\nTermGroupFacetCollector and GroupFacetCollector are deprecated and have been replaced by the the newly introduced TermGroupFacetCollectorManager. This commits removes the deprecated classes and corresponding test class.\n\nRelates to #16292"
    },
    {
      "commit": "234e74585b3d1ad66496abdc40b85046d0b554a6",
      "tree": "1dfedaf7902cd6b23d889b32bf9a4dfb1162ecf0",
      "parents": [
        "5a812aa07091fad934665b4530674923c44df312"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 07 11:11:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 11:11:39 2026 +0200"
      },
      "message": "deps(java): bump com.diffplug.spotless (#16784)\n\nBumps the java group with 1 update: [com.diffplug.spotless](https://github.com/diffplug/spotless).\n\n\nUpdates `com.diffplug.spotless` from 8.10.2 to 8.10.3\n- [Release notes](https://github.com/diffplug/spotless/releases)\n- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)\n- [Commits](https://github.com/diffplug/spotless/compare/gradle/8.10.2...gradle/8.10.3)\n\n---\nupdated-dependencies:\n- dependency-name: com.diffplug.spotless\n  dependency-version: 8.10.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: java\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "5a812aa07091fad934665b4530674923c44df312",
      "tree": "1d8743622635ec6d91e3b0b38112646babfebabd",
      "parents": [
        "a98bd44659351374e6918dc34f7283ff85e66b5a"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Tue Oct 06 21:02:38 2026 +0200"
      },
      "committer": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Tue Oct 06 21:02:38 2026 +0200"
      },
      "message": "Bump dependencychecks plugin to 0.2.4 (jackson transitive upgrade).\n"
    },
    {
      "commit": "a98bd44659351374e6918dc34f7283ff85e66b5a",
      "tree": "c40cdc1e1a7616069985f7b1a3263861e0c003b0",
      "parents": [
        "7787f8bc1a43fb3baf8b2ccd8a7173c073add19e"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Tue Oct 06 20:44:28 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 20:44:28 2026 +0200"
      },
      "message": "Improve gjf error message and upgrade to 1.37.0 (#16782)\n\n* Improve error message on google java format encountering an unrecoverable problem.\n\n* Correct task name in task hacks.\n\n* Upgrade to the newest gjf."
    },
    {
      "commit": "7787f8bc1a43fb3baf8b2ccd8a7173c073add19e",
      "tree": "ab60f103eea800e57b7baa500b042f08e11bcbc2",
      "parents": [
        "d148795b182f4f300477c24bd620024627d653c6"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Tue Oct 06 19:23:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 19:23:14 2026 +0200"
      },
      "message": "Clean up parent test class references to junit. (#16763)\n\n* Clean up parent test class references to junit. Make executor setup lazy.\n\n* Remove comment."
    },
    {
      "commit": "d148795b182f4f300477c24bd620024627d653c6",
      "tree": "5384939f228621151dd3bebeebdcdc1ca6142243",
      "parents": [
        "cbad01e83ef46dc2c9dd569597b5161c25f42e82"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Tue Oct 06 11:47:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 11:47:36 2026 +0200"
      },
      "message": "Introduce TermGroupFacetCollectorManager for concurrent grouped faceting (#16292)\n\nThe old TermGroupFacetCollector could not be adapted to CollectorManager:\nits cross-segment deduplication was fundamentally sequential. At\ndoSetNextReader(), all previously seen (group, facet) pairs were\nre-looked up in each new segment\u0027s ordinal dictionary to rebuild the\nper-segment SentinelIntSet. That O(pairs × segments) walk cannot be\nsplit across concurrent slices, and every unique hit allocated a\nBytesRef copy in the collection hot path.\n\nThe replacement design tracks (groupOrd, facetOrd) pairs as packed\nlongs in a per-slice LongHashSet during collection — no BytesRef\nallocations in the hot path. Ordinals are translated to terms once per\nsegment in LeafCollector.finish(), and reduce() performs global\ndeduplication across all slices via a HashSet\u003cGroupFacetPair\u003e,\ncorrectly counting groups whose documents span multiple search slices.\n\nAll 8 deprecated IndexSearcher#search(Query, Collector) call sites in\nTestGroupFacetCollector are removed as a result.\n\nTermGroupFacetCollector is now deprecated in favour of TermGroupFacetCollectorManager\nThe base class GroupFacetCollector is also now deprecated.\n\nRelates to #12892."
    },
    {
      "commit": "cbad01e83ef46dc2c9dd569597b5161c25f42e82",
      "tree": "dadfca73189699f160951a06143e8ebb76a5d085",
      "parents": [
        "3970208e0d4d5e997a10baac816bd7d1d7693350"
      ],
      "author": {
        "name": "John Maurice",
        "email": "83236397+john-mlika@users.noreply.github.com",
        "time": "Tue Oct 06 09:41:43 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 08:41:43 2026 +0200"
      },
      "message": "Propagate getMergeInstance() through the quantized vector readers (#16622)\n\nMerges of quantized vector fields now also open the raw vectors for themselves.\nLucene104ScalarQuantizedVectorsReader, and the backward-codecs Lucene99 and Lucene102 quantized vector readers, pass getMergeInstance() and finishMerge() on to their raw vectors reader."
    },
    {
      "commit": "3970208e0d4d5e997a10baac816bd7d1d7693350",
      "tree": "e5673378e09e4bdeb425d613da1a824f8fb232c7",
      "parents": [
        "f30bd1b9b4f169e59f01c16ff6f5d27e3b56bf78"
      ],
      "author": {
        "name": "Mike McCandless",
        "email": "mikemccand@apache.org",
        "time": "Mon Oct 05 11:07:40 2026 -0400"
      },
      "committer": {
        "name": "Mike McCandless",
        "email": "mikemccand@apache.org",
        "time": "Mon Oct 05 11:07:40 2026 -0400"
      },
      "message": "GITHUB#7820: move CHANGES.txt entry to end of section; I think this is the norm?\n"
    },
    {
      "commit": "f30bd1b9b4f169e59f01c16ff6f5d27e3b56bf78",
      "tree": "93d753a2758822511b159d6c1cc97ce533d2f8c4",
      "parents": [
        "aa8a3d36156d1ed6c9c47c04f586a351d36da7e2"
      ],
      "author": {
        "name": "Serhiy Bzhezytskyy",
        "email": "me@serhiy-bzhezytskyy.com",
        "time": "Mon Oct 05 17:59:37 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 10:59:37 2026 -0400"
      },
      "message": "GITHUB#7820: report which segment\u0027s .si could not be read (#16476)\n\n* Throw CorruptSegmentInfoException on encountering missing segment info (_N.si) file in CheckIndex\n\n(cherry picked from commit 4c5c628ae83f13761f6746f1c011f4a0fabc25a3)\n(cherry picked from commit 2c33c716f81eebe3c305bb88150d465790f7ccd3)\n\n* GITHUB#7820: carry the segment name and root cause out of a broken .si\n\nFollow-up to the previous commit, which is @gokaai\u0027s from #12872, rebased onto\nmain. That PR introduced CorruptSegmentInfoException but did not finish the two\nthings asked for in its review, so nothing downstream could use the exception:\n\n- The throw site caught the codec\u0027s failure and dropped it, passing the 3-arg\n  constructor. Mike McCandless asked on the PR: \"Can we somehow return the root\n  cause exception here and include it in CheckIndexException\". The cause is what\n  names the file on disk (NoSuchFileException carries the full path to _1.si, a\n  truncated .si surfaces as an EOFException naming the MemorySegmentIndexInput),\n  so dropping it discards the only concrete detail available.\n\n- segmentName was package-private with no accessor, so no caller outside\n  org.apache.lucene.index could read it, and no test could assert on it.\n\nChanges:\n\n- CorruptSegmentInfoException keeps one constructor rather than six, requires a\n  non-null segmentName and cause, and exposes getSegmentName().\n- SegmentInfos passes the cause, and catches Exception | AssertionError rather\n  than Exception, per the review comment that corruption in a .si \"can result in\n  exotic exceptions\". IOContext.READONCE is main\u0027s, kept over the PR\u0027s READ.\n- CheckIndex records the name in Status#brokenSegmentName and reports it, so the\n  message says which segment is broken instead of only that a commit point was\n  unreadable.\n- TestCheckIndex#testCorruptSegmentInfoNamesTheSegment covers both a deleted and\n  a truncated .si, asserting the segment name, the cause type, and that the\n  cause names _1.si. #12872 had no test for the exception it added.\n\n* GITHUB#7820: add CHANGES entry\n\n* GITHUB#7820: shrink-wrap the SegmentInfo scope and use the \u003d\u003d false form\n\nSigned-off-by: Serhiy Bzhezytskyy \u003cme@serhiy-bzhezytskyy.com\u003e\n\n---------\n\nSigned-off-by: Serhiy Bzhezytskyy \u003cme@serhiy-bzhezytskyy.com\u003e\nCo-authored-by: gokai \u003cgokai@amazon.com\u003e"
    },
    {
      "commit": "aa8a3d36156d1ed6c9c47c04f586a351d36da7e2",
      "tree": "5a5b1f163a13dac9aa7bc830b1e88e5c5e6e7ce1",
      "parents": [
        "ed2d3ee8d495eddd39dcf07f74e175d7c5dd0e5f"
      ],
      "author": {
        "name": "Eugene Rizhkov",
        "email": "yevgeny.rizhkov@elastic.co",
        "time": "Mon Oct 05 15:52:56 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 14:52:56 2026 +0200"
      },
      "message": "Use a holder class for UkrainianMorfologikAnalyzer defaults (#16755)\n\ngetDefaultResources() checks defaultResources for null outside the synchronized block and never rechecks inside it, so a thread that lost the race reloads and reparses the dictionary. Since the constructor copies the result into a per-instance field, each analyzer built during the race keeps its own copy of the ~7 MB dictionary instead of sharing one.\n\nThis moves the defaults into a DefaultsHolder class, the same way PolishAnalyzer does it, so class initialization provides the thread safety."
    },
    {
      "commit": "ed2d3ee8d495eddd39dcf07f74e175d7c5dd0e5f",
      "tree": "c7a8ccc60550d1609b8026146213af7533380c74",
      "parents": [
        "6284024cc5572fffafa0a33d855c4927c4b663a4"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Mon Oct 05 14:23:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 14:23:29 2026 +0200"
      },
      "message": "Fix outdated SegmentInfos#readCommit javadocs (#16766)\n\nreadCommit needs updating after #14607"
    },
    {
      "commit": "6284024cc5572fffafa0a33d855c4927c4b663a4",
      "tree": "e914d1dba47a4006ea37c7d920f3b7404cd5fef1",
      "parents": [
        "65ae683e7d4265623940f8505c2486105aeb875e"
      ],
      "author": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 18:04:03 2026 -0400"
      },
      "committer": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 18:04:03 2026 -0400"
      },
      "message": "tidy\n"
    },
    {
      "commit": "65ae683e7d4265623940f8505c2486105aeb875e",
      "tree": "3e1d4ffe0394dc99c66c7c67c47a22e1589095e0",
      "parents": [
        "2bb5ad256e0ac3850115d83d953dad441a244e0a"
      ],
      "author": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 17:19:37 2026 -0400"
      },
      "committer": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 17:19:37 2026 -0400"
      },
      "message": "Add back-compat indices for 10.5.2\n"
    },
    {
      "commit": "2bb5ad256e0ac3850115d83d953dad441a244e0a",
      "tree": "024a31e03f80f31e9d2815f8d532ec2470b22a60",
      "parents": [
        "e9ec8189bea62a2ad61b8e8ebc46c0f0608be7f7"
      ],
      "author": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:49:34 2026 -0400"
      },
      "committer": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:49:34 2026 -0400"
      },
      "message": "Sync CHANGES for 10.5.2\n"
    },
    {
      "commit": "e9ec8189bea62a2ad61b8e8ebc46c0f0608be7f7",
      "tree": "9339eb59f6d7fa57381238e62c99abb3118ad2b3",
      "parents": [
        "b2f5e1034983d3f01a6dc1d448c7b44ca39699d1"
      ],
      "author": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:39:04 2026 -0400"
      },
      "committer": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:39:04 2026 -0400"
      },
      "message": "Add bugfix version 10.5.2\n"
    },
    {
      "commit": "b2f5e1034983d3f01a6dc1d448c7b44ca39699d1",
      "tree": "cbc1d532541eae288b45a8c2531941bc8fefc499",
      "parents": [
        "90c638746d7e510a361e041a55616c52fccf9afb"
      ],
      "author": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:05:54 2026 -0400"
      },
      "committer": {
        "name": "Michael Sokolov",
        "email": "sokolovm@amazon.com",
        "time": "Sun Oct 04 16:05:54 2026 -0400"
      },
      "message": "DOAP changes for release 10.5.2\n"
    },
    {
      "commit": "90c638746d7e510a361e041a55616c52fccf9afb",
      "tree": "1835bf64145e3f0dc1f7f964e8095701f36ae54f",
      "parents": [
        "3bb5f43990390ce1799e07b20e9df4455f050d53"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Sun Oct 04 10:38:37 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 03 23:38:37 2026 -0400"
      },
      "message": "Document the Thai analysis output changes in the 10.6 migration guide (#16770)\n\nThaiAnalyzer now adds ThaiCharFilter, ThaiNormalizationFilter and\nThaiRepeatFilter, its default stopword list changed (115 to 87 entries), and\nThaiTokenizer treats whitespace as a safe buffer boundary. These change the\nterms produced for some input, so an index built with 10.5 can stop matching\nuntil it is reindexed. Describe the changes, show example output, and explain\nhow to rebuild the 10.5 analyzer.\n\nCo-authored-by: Claude Sonnet 5.5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Robert Muir \u003crmuir@apache.org\u003e"
    },
    {
      "commit": "3bb5f43990390ce1799e07b20e9df4455f050d53",
      "tree": "fc0bafdded92043ca807b37d5cd29db07c094053",
      "parents": [
        "389d7803c40158b65ed494b1beb4f925252cf65f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Oct 02 00:07:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 02 00:07:54 2026 -0400"
      },
      "message": "build(deps): bump the python group across 1 directory with 7 updates (#16758)\n\nBumps the python group with 7 updates in the /dev-tools directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [prek](https://github.com/j178/prek) | `0.5.2` | `0.5.3` |\n| [zizmor](https://github.com/zizmorcore/zizmor) | `1.30.0` | `1.30.1` |\n| [rumdl](https://github.com/rvben/rumdl) | `0.2.62` | `0.2.76` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.5` | `0.16.9` |\n| [typos](https://github.com/crate-ci/typos) | `1.50.1` | `1.50.2` |\n| [holidays](https://github.com/vacanza/holidays) | `0.103` | `0.105` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.77` | `0.0.84` |\n\n\n\nUpdates `prek` from 0.5.2 to 0.5.3\n- [Release notes](https://github.com/j178/prek/releases)\n- [Changelog](https://github.com/j178/prek/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/j178/prek/compare/v0.5.2...v0.5.3)\n\nUpdates `zizmor` from 1.30.0 to 1.30.1\n- [Release notes](https://github.com/zizmorcore/zizmor/releases)\n- [Changelog](https://github.com/zizmorcore/zizmor/blob/main/docs/release-notes.md)\n- [Commits](https://github.com/zizmorcore/zizmor/compare/v1.30.0...v1.30.1)\n\nUpdates `rumdl` from 0.2.62 to 0.2.76\n- [Release notes](https://github.com/rvben/rumdl/releases)\n- [Changelog](https://github.com/rvben/rumdl/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/rvben/rumdl/compare/v0.2.62...v0.2.76)\n\nUpdates `ruff` from 0.16.5 to 0.16.9\n- [Release notes](https://github.com/astral-sh/ruff/releases)\n- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/astral-sh/ruff/compare/0.16.5...0.16.9)\n\nUpdates `typos` from 1.50.1 to 1.50.2\n- [Release notes](https://github.com/crate-ci/typos/releases)\n- [Changelog](https://github.com/crate-ci/typos/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/crate-ci/typos/compare/v1.50.1...v1.50.2)\n\nUpdates `holidays` from 0.103 to 0.105\n- [Release notes](https://github.com/vacanza/holidays/releases)\n- [Changelog](https://github.com/vacanza/holidays/blob/dev/CHANGES.md)\n- [Commits](https://github.com/vacanza/holidays/compare/v0.103...v0.105)\n\nUpdates `ty` from 0.0.77 to 0.0.84\n- [Release notes](https://github.com/astral-sh/ty/releases)\n- [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/astral-sh/ty/compare/0.0.77...0.0.84)\n\n---\nupdated-dependencies:\n- dependency-name: holidays\n  dependency-version: \u00270.105\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python\n- dependency-name: prek\n  dependency-version: 0.5.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n- dependency-name: ruff\n  dependency-version: 0.16.9\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: python\n- dependency-name: rumdl\n  dependency-version: 0.2.76\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n- dependency-name: ty\n  dependency-version: 0.0.84\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: python\n- dependency-name: typos\n  dependency-version: 1.50.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n- dependency-name: zizmor\n  dependency-version: 1.30.1\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "389d7803c40158b65ed494b1beb4f925252cf65f",
      "tree": "13ae4850b7d227213fc3185924c585b2248d0355",
      "parents": [
        "47973dd91abdf70b363b5eb08b0a8f058a64c663"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Oct 01 23:49:31 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 23:49:31 2026 -0400"
      },
      "message": "ci: bump the actions group across 2 directories with 6 updates (#16761)\n\nBumps the actions group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `10.0.1` | `10.2.0` |\n| [github/codeql-action/upload-sarif](https://github.com/github/codeql-action) | `4.38.0` | `4.38.2` |\n| [github/codeql-action/init](https://github.com/github/codeql-action) | `4.38.0` | `4.38.2` |\n| [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.38.0` | `4.38.2` |\n| [actions/setup-java](https://github.com/actions/setup-java) | `6.0.0` | `6.0.1` |\n| [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) | `4.0.1` | `4.1.0` |\n\nBumps the actions group with 1 update in the /.github/actions/prepare-for-build directory: [actions/setup-java](https://github.com/actions/setup-java).\n\n\nUpdates `astral-sh/setup-uv` from 10.0.1 to 10.2.0\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/20cfd1bf945f4377ade1205e4dbc17946fc9a30d...c18668ad3cf93ea998bef934396af7bb5c839dc7)\n\nUpdates `github/codeql-action/upload-sarif` from 4.38.0 to 4.38.2\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/b96794f015dfd88f77b49b1c93e0fa7110f94c63...2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2)\n\nUpdates `github/codeql-action/init` from 4.38.0 to 4.38.2\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/b96794f015dfd88f77b49b1c93e0fa7110f94c63...2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2)\n\nUpdates `github/codeql-action/analyze` from 4.38.0 to 4.38.2\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/b96794f015dfd88f77b49b1c93e0fa7110f94c63...2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2)\n\nUpdates `actions/setup-java` from 6.0.0 to 6.0.1\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/dd06d9cba3e5552c54d9f8ea23572deb30010f7c...de7274f081f381c8f8158605e0321c36c376e2e6)\n\nUpdates `conda-incubator/setup-miniconda` from 4.0.1 to 4.1.0\n- [Release notes](https://github.com/conda-incubator/setup-miniconda/releases)\n- [Changelog](https://github.com/conda-incubator/setup-miniconda/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/conda-incubator/setup-miniconda/compare/8ee1f361103df19b6f8c8655fd3967a8ecb162d5...be893c923ea9cf1cf7cd510fbdde27c7e18cbdcb)\n\nUpdates `actions/setup-java` from 6.0.0 to 6.0.1\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/dd06d9cba3e5552c54d9f8ea23572deb30010f7c...de7274f081f381c8f8158605e0321c36c376e2e6)\n\n---\nupdated-dependencies:\n- dependency-name: astral-sh/setup-uv\n  dependency-version: 10.2.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: actions\n- dependency-name: github/codeql-action/upload-sarif\n  dependency-version: 4.38.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: actions\n- dependency-name: github/codeql-action/init\n  dependency-version: 4.38.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: actions\n- dependency-name: github/codeql-action/analyze\n  dependency-version: 4.38.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: actions\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: actions\n- dependency-name: conda-incubator/setup-miniconda\n  dependency-version: 4.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: actions\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "47973dd91abdf70b363b5eb08b0a8f058a64c663",
      "tree": "614752073cf9d5cbeb17521ba270ef3ade9eb9fd",
      "parents": [
        "134587a5c72a2b657961e54605db790aa688d75f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Oct 01 23:48:25 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 23:48:25 2026 -0400"
      },
      "message": "build(deps): bump types-pyyaml in /dev-tools (#16760)\n\nBumps [types-pyyaml](https://github.com/python/typeshed) from 6.0.12.20260815 to 6.0.12.20260906.\n- [Commits](https://github.com/python/typeshed/commits)\n\n---\nupdated-dependencies:\n- dependency-name: types-pyyaml\n  dependency-version: 6.0.12.20260906\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "134587a5c72a2b657961e54605db790aa688d75f",
      "tree": "23e7d07491feff6f3606087b6023d77fdde9ab7a",
      "parents": [
        "cb276351c10966e8afb3e234e9147d6145038e6a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Oct 01 23:47:53 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 23:47:53 2026 -0400"
      },
      "message": "build(deps): bump actionlint-py in /dev-tools (#16759)\n\nBumps [actionlint-py](https://github.com/Mateusz-Grzelinski/actionlint-py) from 1.7.12.24 to 1.7.12.25.\n- [Commits](https://github.com/Mateusz-Grzelinski/actionlint-py/compare/v1.7.12.24...v1.7.12.25)\n\n---\nupdated-dependencies:\n- dependency-name: actionlint-py\n  dependency-version: 1.7.12.25\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "cb276351c10966e8afb3e234e9147d6145038e6a",
      "tree": "facfbc6160edd3a4ead2adbbd86602731ecfa232",
      "parents": [
        "2a3ff1faf4cd70d9ce622e4fdb2930cc9917a65e"
      ],
      "author": {
        "name": "Pulkit Gupta",
        "email": "36265543+Pulkitg64@users.noreply.github.com",
        "time": "Thu Oct 01 16:14:06 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 16:14:06 2026 -0400"
      },
      "message": "Add `DiversifyingChildrenFloat16KnnVectorQuery` for fp16 parent-block-join KNN search (#16738)"
    },
    {
      "commit": "2a3ff1faf4cd70d9ce622e4fdb2930cc9917a65e",
      "tree": "57285a0bd4a6c84fd3488345cd254638aeb9aea7",
      "parents": [
        "82d73908cb1804fdeacc560e2e6ade8c94db08c7"
      ],
      "author": {
        "name": "Kaival Parikh",
        "email": "kaivalp2000@gmail.com",
        "time": "Thu Oct 01 11:35:53 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 11:35:53 2026 -0400"
      },
      "message": "Dedup vector reader / writer initialization: close all files on hitting exceptions. (#16753)"
    },
    {
      "commit": "82d73908cb1804fdeacc560e2e6ade8c94db08c7",
      "tree": "1daa385a4fa4306cb5ae0d23577d938c30e1db42",
      "parents": [
        "fe67d20e9e96df869d492bfc722a86e71deb42ab"
      ],
      "author": {
        "name": "goankur",
        "email": "47429106+goankur@users.noreply.github.com",
        "time": "Thu Oct 01 01:17:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 10:17:01 2026 +0200"
      },
      "message": "Prefetch full-precision vectors when rescoring (#16705)\n\nRescoring reads one raw vector per candidate, and each read used to\nstart only once the previous one had been scored. RescoreTopNQuery now\nissues the load for a candidate while scoring the one a window behind\nit, keeping a fixed number of reads in flight. Candidates are held in a\nring that spans segments, so only doc ids are buffered and the buffer\ndoes not grow with the shortlist.\n\nPrefetching gains two methods: KnnVectorValues#prefetch(int ord, int\ncount) for a run of consecutive ordinals, which is a single read, and\nDoubleValues#prefetch(int doc) so a value source can start a load\nbefore it is advanced to. Both default to a no-op.\nKnnVectorValues#prefetch(int[], int) keeps its signature and now splits\nits ordinals into runs and delegates, so the formats no longer\nimplement it themselves."
    },
    {
      "commit": "fe67d20e9e96df869d492bfc722a86e71deb42ab",
      "tree": "2a6d1a015fa24bb690e4cf5a04cd0aedcfefdaa2",
      "parents": [
        "c95aa21a7b7698e9f7313f9fd1453187ec158f1f"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Thu Oct 01 09:55:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 09:55:52 2026 +0200"
      },
      "message": "Let merges read stored fields sequentially without disturbing searches (#16684)\n\nA merge reads stored fields front to back, while searches read the same file at random.\n`getMergeInstance()` clones the mapping the reader already holds, so whether a merge gets sequential\nreads comes down to who opened the segment first. Asking for them in place is not an option, since\nread advice applies to a whole mapping and searches are on it.\n\nSo a merge opens the data file for itself with `DataAccessHint.SEQUENTIAL`, and searches keep the\nmapping they have. The original reader owns that second mapping and closes it, since merge instances\nare never closed.\n\n\nCloses #16213\nRelates #16427"
    },
    {
      "commit": "c95aa21a7b7698e9f7313f9fd1453187ec158f1f",
      "tree": "7f6b4a6f5e3e81ecd28c6c04f0bba192e408505b",
      "parents": [
        "cec7bdd1a0c07838f38ef8e576f8d9b3deed5416"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Thu Oct 01 09:29:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 09:29:34 2026 +0200"
      },
      "message": "Let a merge read the vectors through its own mapping (#16749)\n\nRead advice belongs to a mapping, not to a file. A merge reads the raw vectors front to back and once, a graph search reads them at random, and both can happen on the same file at the same time. A merge used to change the advice on the mapping searches were using and put it back at the end.\n\nNow `Lucene99FlatVectorsReader.getMergeInstance()` maps the data file again and asks for sequential reads that are not worth keeping in the page cache. The mapping is created when a merge first asks for it, shared by the merge instances that follow, and released by `finishMerge()` when the last one is done. Searches keep their own mapping.\n\nThe reopen says a merge is reading, with `IOContext.merge()`. That\u0027s a merge context with no `MergeInfo`, since the reader knows a merge is reading the file but not how large the merge is. A `Directory` can route it like any other merge read, and `DirectIODirectory` falls back to the file length when the merge size is unknown.\n\nThe writers had nothing to go on either, every vectors data file was created with a bare context. Each one now says what its own file is, and the quantized format tells the raw delegate that its vectors are only read back to rescore. So the raw vectors say no-reuse when they are written and when a merge reads them, matching what they already say for search."
    },
    {
      "commit": "cec7bdd1a0c07838f38ef8e576f8d9b3deed5416",
      "tree": "0c3b84ee648d53c7d19ff45665a925d7198a249e",
      "parents": [
        "f67d5374ce0c39e31562aaeb6a914f1150a5f402"
      ],
      "author": {
        "name": "Kaival Parikh",
        "email": "kaivalp2000@gmail.com",
        "time": "Wed Sep 30 18:53:18 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 18:53:18 2026 -0400"
      },
      "message": "Use quantized vectors for fp16 HNSW graph merging (#16687)"
    },
    {
      "commit": "f67d5374ce0c39e31562aaeb6a914f1150a5f402",
      "tree": "4a19599cdeffc861814f179eccded19e66e802c9",
      "parents": [
        "5e537615b292d5af7cd38c7546842f76dc1fba66"
      ],
      "author": {
        "name": "Pranshu Shukla",
        "email": "55992439+Pranshu-S@users.noreply.github.com",
        "time": "Thu Oct 01 01:51:14 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 16:21:14 2026 -0400"
      },
      "message": "Use minimum bits per value of field -\u003e group ordinal mapping in dedup vector codec (#16706)"
    },
    {
      "commit": "5e537615b292d5af7cd38c7546842f76dc1fba66",
      "tree": "e9c0bb9a19e775c63d041e00de43d538303c06cd",
      "parents": [
        "8557a5c29cf38415bdc755d79b36bf882ac666f9"
      ],
      "author": {
        "name": "Egor Potemkin",
        "email": "eg13reg@gmail.com",
        "time": "Wed Sep 30 18:03:44 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 13:03:44 2026 -0400"
      },
      "message": "Rewrite BooleanQuery to MatchNoDocsQuery when it has MUST_NOT clause (#16667) \n\nmatching one of its MUST boost or constant score query clauses."
    },
    {
      "commit": "8557a5c29cf38415bdc755d79b36bf882ac666f9",
      "tree": "0a70e51257c76aea290d567ba73106efa7e7111c",
      "parents": [
        "aae7dc11cacea7015e820f7ad22a39a41828ff17"
      ],
      "author": {
        "name": "Luca Cavanna",
        "email": "javanna@apache.org",
        "time": "Wed Sep 30 17:32:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 17:32:46 2026 +0200"
      },
      "message": "Release default LRUQueryCache as early as possible in tests (#16740)\n\n`LuceneTestCaseParent` currently assigns a new LRUQueryCache instance to each of\nits test methods, as well as one to the code execution outside of tests\n(e.g. before class methods)\n\nThis is important to make sure that each index searcher used starts with its own\ninstance of LRUQueryCache.\n\nAll of the different instances are currently piled up in a static list, that gets\niterated on in the after class method, which closes each item. The static list is\nnever cleared, hence it ends up holding a lot of references. Each cache could\nbe closed straight-away once it\u0027s out of scope. As a consequence, you can have\nextreme scenarios where accumulating query caches in the static list causes OOM.\n\nThis commit removes the list, and attempts to release resources held by the different\nLRU query caches instances as early as possible, by introducing an after test method.\n\nThe after class method stays but it closes only the static LRU query cache, no longer a list."
    },
    {
      "commit": "aae7dc11cacea7015e820f7ad22a39a41828ff17",
      "tree": "9bf8a9bbdb7d64915336ffe22c72a0232408925d",
      "parents": [
        "4eb488d0f9e8255d95252ef54d92c8495a6cda7b"
      ],
      "author": {
        "name": "Simon Cooper",
        "email": "simon.cooper@elastic.co",
        "time": "Wed Sep 30 13:34:32 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 13:34:32 2026 +0100"
      },
      "message": "Remove vector merge scorer tests that check exact byte equality (#16752)"
    },
    {
      "commit": "4eb488d0f9e8255d95252ef54d92c8495a6cda7b",
      "tree": "829d2ec8a7cefa5a9c95fe95b099255a7c4ea6df",
      "parents": [
        "d157c3a12468345f5c5ee71a4468b1459b766254"
      ],
      "author": {
        "name": "Simon Cooper",
        "email": "simon.cooper@elastic.co",
        "time": "Wed Sep 30 10:48:48 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 10:48:48 2026 +0100"
      },
      "message": "HNSW - don\u0027t add duplicates when repairing graph links (#16728)\n\nIf the scorer is inaccurate, the highest score may not be the identity function. This can lead to duplicate entries in the neighor list. Check for dups before adding during fixing up after deletes"
    },
    {
      "commit": "d157c3a12468345f5c5ee71a4468b1459b766254",
      "tree": "174723306a331d52c7c790f5d9ff7afe02a16110",
      "parents": [
        "fadd63e0eb4e18ba8dd9ea7c0ead4f039c6bb43b"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Tue Sep 29 22:54:48 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 22:54:48 2026 -0400"
      },
      "message": "build: support java 27 (#16745)\n\nCurrently java 27 gives the user an error message due to our custom\ncheck. Extend it to java 27, which is GA. It works with gradle, and with\nour build."
    },
    {
      "commit": "fadd63e0eb4e18ba8dd9ea7c0ead4f039c6bb43b",
      "tree": "a8db862393581d0032881168832ffcc44e350ed5",
      "parents": [
        "1adb280101d9ea2059308ca17ba327ba71f70ce7"
      ],
      "author": {
        "name": "Sagar Upadhyaya",
        "email": "99425694+sgup432@users.noreply.github.com",
        "time": "Tue Sep 29 13:56:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 13:56:09 2026 -0700"
      },
      "message": "Fix LRUQueryCache hashCode/equals contract and account query RAM once per distinct query (#16657)\n\nAlso route to partition by query only"
    },
    {
      "commit": "1adb280101d9ea2059308ca17ba327ba71f70ce7",
      "tree": "88771fa5fbb8df83d2e746aae6519b96f4b23ac2",
      "parents": [
        "c857eeebe7ea60d7952c77784d84dea7ed8755de"
      ],
      "author": {
        "name": "Salvatore Campagna",
        "email": "salvatorecampagna@users.noreply.github.com",
        "time": "Tue Sep 29 22:22:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 22:22:45 2026 +0200"
      },
      "message": "Cover both early exit modes in TestHnswQueueSaturationCollector (#16704)"
    },
    {
      "commit": "c857eeebe7ea60d7952c77784d84dea7ed8755de",
      "tree": "52dd399872e05ac43256f9f4f2a85f0a7c345300",
      "parents": [
        "2a38fffef52a8e314492ab7db338c4293836ac2a"
      ],
      "author": {
        "name": "Trevor McCulloch",
        "email": "mccullocht@gmail.com",
        "time": "Tue Sep 29 13:07:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 13:07:30 2026 -0700"
      },
      "message": "Make DocAndScoreQuery public (#16686)\n\nThis is useful if you are writing your own KNN query classes and wish to share the same execution model as the existing (package private) AbstractKnnVectorQuery."
    },
    {
      "commit": "2a38fffef52a8e314492ab7db338c4293836ac2a",
      "tree": "c361760de81c27fb13e2442ced34fa19d0c3f205",
      "parents": [
        "5a626cd6de6e95c36cd1aca8342224a95dceaafb"
      ],
      "author": {
        "name": "Serhiy Bzhezytskyy",
        "email": "me@serhiy-bzhezytskyy.com",
        "time": "Tue Sep 29 22:49:41 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 21:49:41 2026 +0200"
      },
      "message": "Reject LZ4 match offsets that point before the start of the output (#16478)\n\n* Reject LZ4 match offsets that point before the start of the output\n\nLZ4#decompress read a match offset without checking it against the number\nof bytes written so far. An offset larger than dOff makes the match\nreference bytes before dest[0], which this call never wrote, so corrupt\ninput failed with ArrayIndexOutOfBoundsException from System.arraycopy or\nfrom the incremental copy loop rather than with a checked IOException.\n\nThe bound is dOff and not the number of bytes decompressed by this call,\nbecause a preset dictionary is placed in dest[dOff-dictLen:dOff] and a\nmatch may legitimately reference it.\n\nThe compressor already asserts the same invariant when writing a match\n(matchDec \u003e 0 \u0026\u0026 matchDec \u003c 1 \u003c\u003c 16 at LZ4.java:183), so this only\naffects input that was not produced by LZ4#compress.\n\n* Use the PR number in the CHANGES entry\n\n---------\n\nCo-authored-by: Uwe Schindler \u003cuschindler@apache.org\u003e"
    },
    {
      "commit": "5a626cd6de6e95c36cd1aca8342224a95dceaafb",
      "tree": "f382904886e89dc4ecf39a18cab447f3c65d33ad",
      "parents": [
        "73cc8124fe26fa80a4c8e0ef8fc611bb8d2964e3"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Tue Sep 29 15:32:47 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 15:32:47 2026 -0400"
      },
      "message": "ci: bump ubuntu-24.04-arm to ubuntu-26.04-arm (#16737)\n\n* ci: bump ubuntu-24.04-arm to ubuntu-26.04-arm\n\nUbuntu 26 runners are GA. Add a workaround for actionlint to recognize\nthe runner names until it is updated. the x86-based ubuntu-latest will\nmigrate automatically in the upcoming weeks.\n\nhttps://github.blog/changelog/2026-09-17-ubuntu-26-generally-available-and-latest-migration/\n\n* ci: don\u0027t attempt to install outdated 3.12 python\n\nThere isn\u0027t sense in pinning the version like this. On newer runners\nthey have newer bugfix versions of 3.12. If we really really\nwanted to do this, we could do it with uv."
    },
    {
      "commit": "73cc8124fe26fa80a4c8e0ef8fc611bb8d2964e3",
      "tree": "07d727508ca66f66b99a2b2522077e67f25d6f73",
      "parents": [
        "8cd74fed97b18f7e5985c0a0f480f17f910d9238"
      ],
      "author": {
        "name": "Jakub Slowinski",
        "email": "32519034+slow-J@users.noreply.github.com",
        "time": "Tue Sep 29 19:59:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 14:59:53 2026 -0400"
      },
      "message": "Use the doc-values skip index to skip per-doc value lookups in LongRangeFacetCutter (#16268)\n\n* Use the doc-values skip index to skip per-doc value lookups in LongRangeFacetCutter\n\n* Remove redundant assertion\n\n* Extend the skip-index fast path to non-dense blocks and reuse the interval tracker\n\n* Remove single-valued unwrapping routing\n\n* Address review comments\n\n* Use the skip index for multi-valued fields\n\n* Consolidate skipper block handling\n\n* Update CHANGES.txt"
    },
    {
      "commit": "8cd74fed97b18f7e5985c0a0f480f17f910d9238",
      "tree": "1d69a31fdaccfb571fde0291351e84399d7f5d46",
      "parents": [
        "020802ff07053f50ed215244a90f3696cef498a3"
      ],
      "author": {
        "name": "Dzung Bui",
        "email": "dungba.sg@gmail.com",
        "time": "Wed Sep 30 02:37:18 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 13:37:18 2026 -0400"
      },
      "message": "Record FST ramBytesUsed correctly (#15133)"
    },
    {
      "commit": "020802ff07053f50ed215244a90f3696cef498a3",
      "tree": "805a118ad6f4054a82c9ab71131b93be301b3a3b",
      "parents": [
        "b304eeae0243892c2e795f7d0a2a9dd4da1b46cb"
      ],
      "author": {
        "name": "Recep Eken",
        "email": "116716794+rcpeken@users.noreply.github.com",
        "time": "Tue Sep 29 18:11:28 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 11:11:28 2026 -0400"
      },
      "message": "Add `Float16VectorSimilarityQuery` for similarity threshold search over fp16 vectors (#16735) (part of #16725)\n\nAdd `Float16VectorSimilarityQuery`, the fp16 counterpart of `[Byte|Float]VectorSimilarityQuery` for similarity threshold vector search on fields indexed with `KnnFloat16VectorField`.\n\nThe class mirrors `FloatVectorSimilarityQuery` on top of fp16 APIs added in #16383."
    },
    {
      "commit": "b304eeae0243892c2e795f7d0a2a9dd4da1b46cb",
      "tree": "3c7d7a2f5f5922a605ce583940fecda9e1306ef2",
      "parents": [
        "55fd2e75fb2be51ab46f16c3fd71dc00a8152523"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 20:34:07 2026 -0400"
      },
      "committer": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 20:34:07 2026 -0400"
      },
      "message": "fix: don\u0027t process empty strings in thai user dictionary\n\nEmpty strings in a segmentation dictionary don\u0027t really make sense. So\nprevent processing them in any way and add an empty-string test.\n\nPreviously, if an empty string was in the user dictionary, then it would\ncause the dictionary code to call BreakIterator.following(-1)\n\nCloses #16736\n"
    },
    {
      "commit": "55fd2e75fb2be51ab46f16c3fd71dc00a8152523",
      "tree": "4a978e8161aec8cc35f2b1d738a8aab3d6774e4b",
      "parents": [
        "8d999e9487df1c036a7819aaab9fc3fe1a4694b0"
      ],
      "author": {
        "name": "Pulkit Gupta",
        "email": "36265543+Pulkitg64@users.noreply.github.com",
        "time": "Mon Sep 28 17:03:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 17:03:00 2026 -0400"
      },
      "message": "Fp16 re ranking and prefetch support (#16628)"
    },
    {
      "commit": "8d999e9487df1c036a7819aaab9fc3fe1a4694b0",
      "tree": "6a35bc54c198f7722fa8d7292fb04a3e8cc2e570",
      "parents": [
        "c73e2e4aad13ee585ea6e457cf7f65f3273bf7cb"
      ],
      "author": {
        "name": "Mayya Sharipova",
        "email": "mayya.sharipova@elastic.co",
        "time": "Mon Sep 28 13:11:43 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 13:11:43 2026 -0400"
      },
      "message": "Validate vector values in columnar addBatch (#16708)\n\nKnnFloatVectorField, KnnFloat16VectorField and KnnByteVectorField\nreject non-finite components, and the float and byte fields reject\nzero vectors with COSINE. The VectorColumn path in IndexingChain only\nchecked doc ids and the dimension, so addBatch accepted vectors that\naddDocument would reject.\n\nAdd the equivalent checks to ColumnValidation and apply them for\nevery vector consumed from a VectorColumn, for both dense and sparse\ncolumns.\n\nKnnFloat16VectorField, added after zero vectors were prohibited for\nCOSINE, never got that check. Add VectorUtil.isZeroVectorFloat16 and\nreject zero float16 vectors with COSINE in both the field and the\ncolumn path.\n\n* Add CHANGES entry for GITHUB#16708\n\nRecord the columnar addBatch vector validation change under 10.6.0\nImprovements."
    },
    {
      "commit": "c73e2e4aad13ee585ea6e457cf7f65f3273bf7cb",
      "tree": "3ed3238c3745be73b3245b9cb299edb224a25ea5",
      "parents": [
        "be64d065265175bfc8663be465779e219a6e5d4e"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 11:44:56 2026 -0400"
      },
      "committer": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 11:44:56 2026 -0400"
      },
      "message": "docs: change since tags to 10.6 for thai improvements\n"
    },
    {
      "commit": "be64d065265175bfc8663be465779e219a6e5d4e",
      "tree": "81b9ea0061c8568dcab397bca7475e07174025c5",
      "parents": [
        "3be9cd6e6629f5ac086b3a656b16c3e88bdaf801"
      ],
      "author": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 11:32:55 2026 -0400"
      },
      "committer": {
        "name": "Robert Muir",
        "email": "rmuir@apache.org",
        "time": "Mon Sep 28 11:32:55 2026 -0400"
      },
      "message": "docs: move Thai improvements to 10.6\n"
    },
    {
      "commit": "3be9cd6e6629f5ac086b3a656b16c3e88bdaf801",
      "tree": "6942963d94aa4b931c7ea0ed700b7b15132aef99",
      "parents": [
        "e082cde759cfa4934df28c5f6d6f20e0ae04952f"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jim.ferenczi@elastic.co",
        "time": "Mon Sep 28 09:50:40 2026 +0200"
      },
      "committer": {
        "name": "Jim Ferenczi",
        "email": "jim.ferenczi@elastic.co",
        "time": "Mon Sep 28 09:50:48 2026 +0200"
      },
      "message": "Move the #16682 entry to 10.6.0, where it ships first\n"
    },
    {
      "commit": "e082cde759cfa4934df28c5f6d6f20e0ae04952f",
      "tree": "9b1100402587204b679e45b86222e9825b7f6075",
      "parents": [
        "79674f38df7d7b67a1bf3081175affdfb0213978"
      ],
      "author": {
        "name": "Renato Haeberli",
        "email": "renato@onnet.ch",
        "time": "Mon Sep 28 09:24:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 09:24:16 2026 +0200"
      },
      "message": "Add type to compound word (#16680)\n\n* Use more efficient ArrayDeque instead of LinkedList\n\n# Conflicts:\n#\tlucene/analysis/common/src/java/org/apache/lucene/analysis/compound/CompoundWordTokenFilterBase.java\n\n* marking compounds as type\u003dcompound\n\n* set type of subwords to type\u003d\"subwords\"\n\n* add entry to Change\n\n* add entry to Change\n\n* renaming constant\n\n* do not use constant in unit-test\n\n---------\n\nCo-authored-by: Renato Haeberli \u003crenato@haeberli-consulting.com\u003e\nCo-authored-by: Renato Haeberli \u003crenato.haeberli@merkle.com\u003e"
    },
    {
      "commit": "79674f38df7d7b67a1bf3081175affdfb0213978",
      "tree": "c4ae1950ad7818455e8421eba28ab7a93bdd9576",
      "parents": [
        "dda6bd36b811c82bebe78ad8cec72f2b8e7719b9"
      ],
      "author": {
        "name": "Jim Ferenczi",
        "email": "jimczi@apache.org",
        "time": "Mon Sep 28 09:10:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 09:10:36 2026 +0200"
      },
      "message": "Let the structure reading vectors say how they are read (#16682)\n\nA format opening a file can attach hints to say what it holds and how it will be read, and a\ndirectory can act on them. `MMapDirectory` turns them into `madvise` calls if an application asks it\nto. Today the vectors formats get two things wrong there.\n\nThe first is who is talking. How a file is read depends on what is reading it, not on what it holds.\nThe same flat vectors are walked all over the place under an HNSW graph and scanned front to back by\nan exact search, yet it was the flat format claiming random access for both. And during a merge it\ncould say nothing at all, because `IOContext.merge(...).withHints(...)` returns the same context and\ndrops the hints, as does `flush(...)`.\n\nSo merge and flush contexts now carry hints, and the HNSW formats carry the random hint rather than\nthe flat ones, at search time and while a merge builds the graph. Formats that can be wrapped follow\ntheir caller; a format reading its own files, like the HNSW graph or the Faiss index, still sets its\nown.\n\nThe second is that `RANDOM` is too coarse to act on. It is really two claims in one: don\u0027t read\nahead, and don\u0027t bother remembering these pages. On mmap they come together, since random advice\ntakes a mapping out of the page reclaim\u0027s recency tracking. That is what you want for stored fields,\nterm vectors and the raw vectors kept only to rescore, which land somewhere else on every query. It\nis the opposite of what you want for the vectors a graph walks, which are the ones you most want to\nkeep in memory. So `NoReuseHint` splits them: those three set it, the vectors under a graph don\u0027t.\n\nNothing behaves differently here. The point is that an application can now tell the two apart and\npick, which it could not do before."
    },
    {
      "commit": "dda6bd36b811c82bebe78ad8cec72f2b8e7719b9",
      "tree": "257bcecfe733db8b39414ff82ab0aa536ba147d9",
      "parents": [
        "6b44b4c2a3afadee94c035d680d8dc9856ee93d7"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Mon Sep 28 08:38:34 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 21:38:34 2026 -0400"
      },
      "message": "Allow configurable buffer size in SegmentingTokenizerBase and recognize whitespace as safe boundary in ThaiTokenizer (#10153) (#16727)"
    },
    {
      "commit": "6b44b4c2a3afadee94c035d680d8dc9856ee93d7",
      "tree": "7f0abdd442c74bd0f5d6c474cd3041fc1b2b89fd",
      "parents": [
        "b7c2c202ba695d8fd8cfb7081ad183b89922a462"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Mon Sep 28 07:58:58 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 20:58:58 2026 -0400"
      },
      "message": "Support user dictionary in ThaiTokenizer and ThaiTokenizerFactory (#16721) (#16722)\n\n* Support user dictionary in ThaiTokenizer and ThaiTokenizerFactory (#16721)\n\n* Update CHANGES.txt for #16722\n\n* Apply spotless formatting to ThaiTokenizer and TestThaiTokenizerFactory\n\n* Simplify user dictionary min/max word length calculation per review suggestion"
    },
    {
      "commit": "b7c2c202ba695d8fd8cfb7081ad183b89922a462",
      "tree": "1789fabc19eb8c7670c37b97163b2c20529f20b9",
      "parents": [
        "b0ae596a78b1a79069a44c6d2cd4a87a15b8c086"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Mon Sep 28 04:54:53 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 17:54:53 2026 -0400"
      },
      "message": "Add ThaiRepeatFilter to handle Thai Maiyamok (ๆ) reduplication (#16719) (#16720)\n\n* Add ThaiRepeatFilter to handle Thai Maiyamok (ๆ) reduplication (#16719)\n\n* Fix OffsetAttribute handling in ThaiRepeatFilter and add randomized offset tests\n\n- Ensure both the primary term and repeated Maiyamok tokens receive precise, non-overlapping start/end offsets.\n- For attached Maiyamok (e.g. \u0027เร็วๆ\u0027), set primary token endOffset to boundary before \u0027ๆ\u0027 and set repeated token offsets to match the corresponding \u0027ๆ\u0027 character(s).\n- For multiple standalone Maiyamok (e.g. \u0027ๆๆ\u0027), partition token offsets evenly across each repetition.\n- Update TestThaiRepeatFilter with exact offset assertions and add randomized testing with checkRandomData.\n\n* Update CHANGES.txt for #16720\n\n* Apply spotless formatting to ThaiRepeatFilter and tests\n\n* Fix: register ThaiRepeatFilterFactory in module-info.java provides block for JPMS discovery"
    },
    {
      "commit": "b0ae596a78b1a79069a44c6d2cd4a87a15b8c086",
      "tree": "c32485c63fc3f6761da5a42d556cf6a056a9d39b",
      "parents": [
        "e64ae25dcd894019125d0a0bd723133b633b009e"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Mon Sep 28 04:34:36 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 17:34:36 2026 -0400"
      },
      "message": "Curate Thai stopwords to prevent over-filtering of compound words (#5323, #14730) (#16718)\n\n* Curate Thai stopwords to prevent over-filtering of compound words (LUCENE-4253, #14730)\n\n* Update CHANGES.txt for #16718\n\n* Apply spotless formatting to TestThaiAnalyzer"
    },
    {
      "commit": "e64ae25dcd894019125d0a0bd723133b633b009e",
      "tree": "af37ce9bd6fdbe72a0cd3fb52b7bad7785292146",
      "parents": [
        "e357029271b3de560a6ff13c9cab4d4c8103b53b"
      ],
      "author": {
        "name": "Kamthorn Krairaksa",
        "email": "kamthorn@users.noreply.github.com",
        "time": "Mon Sep 28 04:09:27 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 17:09:27 2026 -0400"
      },
      "message": "Add ThaiCharFilter, ThaiNormalizationFilter, and ThaiNormalizer (#16716) (#16717)\n\n* Add ThaiNormalizationFilter and ThaiNormalizer to Thai analysis pipeline\n\n* Add ThaiCharFilter and ThaiCharFilterFactory for pre-tokenization normalization (#16716)\n\n- Implements ThaiCharFilter extending BaseCharFilter to normalize character anomalies before tokenization.\n- Crucial for Thai: typographic anomalies (such as double Sara E \u0027เเ\u0027 or separated Sara Am) cause JDK BreakIterator to fail boundary detection and incorrectly merge adjacent words. Pre-tokenization char filtering restores correct word boundaries.\n- Replaces double Sara E (\u0027เ\u0027+\u0027เ\u0027 -\u003e \u0027แ\u0027), recomposes Sara Am, removes Zero-Width characters, deduplicates marks, and correctly records offset corrections via addOffCorrectMap.\n- Adds ThaiCharFilterFactory (SPI: \u0027thai\u0027) registered in CharFilterFactory service.\n- Wraps Reader with ThaiCharFilter in ThaiAnalyzer (initReader and initReaderForNormalization).\n- Adds TestThaiCharFilter and TestThaiCharFilterFactory.\n\n* Update CHANGES.txt for #16717\n\n* Apply spotless formatting to Thai CharFilter and Normalizer\n\n* Fix: register ThaiCharFilterFactory and ThaiNormalizationFilterFactory in module-info.java for JPMS discovery"
    },
    {
      "commit": "e357029271b3de560a6ff13c9cab4d4c8103b53b",
      "tree": "e2ad89d8d2d9160076d59f136b20269172afcf31",
      "parents": [
        "df6f71a3729af3f015eb807669e64b43145c304a"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 21:29:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 21:29:56 2026 +0200"
      },
      "message": "Make SimpleCodec return docvalues singletons (#16714)"
    },
    {
      "commit": "df6f71a3729af3f015eb807669e64b43145c304a",
      "tree": "7d9edb309b8ef2626188afeeda2979990f1f6051",
      "parents": [
        "5b626cbaa2f5d56cc1506e8774c83a49a9e853c1"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 14:04:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 14:04:11 2026 +0200"
      },
      "message": "Go back to the official google-java-format distribution  (#16713)\n\n* Go back to the official google-java-format distribution now that it supports markdown.\n\n* Invalidate google-java-format file state caches when the formatter changes.\n\nThe apply and check tasks keep a per-module cache of file states so that unchanged\nfiles are skipped. That cache was keyed on file content only, so a formatter upgrade\ndid not cause unchanged files to be formatted or checked again. Add the formatter\u0027s\ncoordinates as a task input and record them in the cache; a mismatch discards the\nstored states and every file is processed again."
    },
    {
      "commit": "5b626cbaa2f5d56cc1506e8774c83a49a9e853c1",
      "tree": "d84c67a8279e8aa09cbbbccbd1fb2ff492e45eec",
      "parents": [
        "b28d73205006a9b48a8a6e23dbd4a0f7a91da32e"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 10:38:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 10:38:37 2026 +0200"
      },
      "message": "Plugin and build-time dependency updates (#16712)\n\n* Reapply the unused versions plugin.\n\n* Update randomizedtesting dependency.\n\n* Exclude pre-releases and s2-geometry.\n\n* Upgrade zstd (used in dataset benchmarks).\n\n* Bump develocity plugin to 4.6.0.\n\n* Upgrade groovy to 6.0.0.\n\n* Upgrade ecj to 3.46.100."
    },
    {
      "commit": "b28d73205006a9b48a8a6e23dbd4a0f7a91da32e",
      "tree": "9b2de66bba7a07f248a1f53cfa7aa8a334c6c4b6",
      "parents": [
        "c72bc6abf18b480d745a5637a5a504b3a22da7b2"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 09:15:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 09:15:45 2026 +0200"
      },
      "message": "Upgrade gradle to 9.8.0. (#16711)"
    },
    {
      "commit": "c72bc6abf18b480d745a5637a5a504b3a22da7b2",
      "tree": "cae1339b169236b3c3d083b0feb686e32cbced21",
      "parents": [
        "595331c5322e4ea4ea103804de95aeb1bccbb051"
      ],
      "author": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 08:33:12 2026 +0200"
      },
      "committer": {
        "name": "Dawid Weiss",
        "email": "dawid.weiss@carrotsearch.com",
        "time": "Fri Sep 25 08:33:49 2026 +0200"
      },
      "message": "Revert \"Implement data-blind scalar quantization (#16030)\"\n\nThis reverts commit cab6cfcb604106b5789262278b09cb0e7170584e.\n"
    },
    {
      "commit": "595331c5322e4ea4ea103804de95aeb1bccbb051",
      "tree": "a73e5d0932dab20456632ddb644bee1e79e4863f",
      "parents": [
        "c5fa32ce49f6d28e82ac1b6f111264d955d54a7f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Sep 25 08:25:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 08:25:38 2026 +0200"
      },
      "message": "deps(java): bump com.github.ben-manes.versions in the java group (#16703)\n\nBumps the java group with 1 update: com.github.ben-manes.versions.\n\n\nUpdates `com.github.ben-manes.versions` from 0.61.0 to 0.63.1\n\n---\nupdated-dependencies:\n- dependency-name: com.github.ben-manes.versions\n  dependency-version: 0.63.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: java\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c5fa32ce49f6d28e82ac1b6f111264d955d54a7f",
      "tree": "48ab5625324f5b26b257d19f0b8c98928f7a4b17",
      "parents": [
        "c80c9f53674f639e76d17c6de7d00b2db0de24f7"
      ],
      "author": {
        "name": "kkewwei",
        "email": "kewei.11@bytedance.com",
        "time": "Thu Sep 24 16:30:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 09:30:33 2026 +0100"
      },
      "message": "Use intoBitSet to speed up ReqExclBulkScorer (#16669)"
    },
    {
      "commit": "c80c9f53674f639e76d17c6de7d00b2db0de24f7",
      "tree": "34826a5526634c0efc4eeb63f7a9999e5655fad6",
      "parents": [
        "0b346c5141e5ffeca8129a0280fa55768a19c643"
      ],
      "author": {
        "name": "John Maurice",
        "email": "83236397+john-mlika@users.noreply.github.com",
        "time": "Wed Sep 23 11:36:18 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 09:36:18 2026 +0100"
      },
      "message": "Stop reading merged float vectors back to build the HNSW merge scorer (#16696)\n\nProduce the merge scorer\u0027s query-side records while writing the merged vectors, instead of reading the merged floats back to re-quantize them from scratch.\n\nAdd a method to FlatVectorsWriter that allows the HNSW writer to access the query records directly and use them during merging."
    },
    {
      "commit": "0b346c5141e5ffeca8129a0280fa55768a19c643",
      "tree": "5d701f5dfcc53b064735521ea902009ab6370e2e",
      "parents": [
        "169cbffd12f4579ad8bd2906a4b70e2e70130711"
      ],
      "author": {
        "name": "Houston Putman",
        "email": "houston@apache.org",
        "time": "Mon Sep 21 11:21:17 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 11:21:17 2026 -0700"
      },
      "message": "Fix range query for NumericDocValues for float and double values (#16629)\n\nThis reverts commit 6345fef41458927ce480219269ded2250d58110b."
    }
  ],
  "next": "169cbffd12f4579ad8bd2906a4b70e2e70130711"
}
