Commit Graph

37728 Commits

Author SHA1 Message Date
linfn 58f65cc69b Fix StoredFieldsConsumer finish (#13927) 2024-10-21 16:55:49 +02:00
Armin Braun 9f7ef105db Speedup OrderIntervalsSource some more (#13937)
Follow-up to #13871, getting another speedup from relatively trivial changes:

* avoid redundant `end()` call by directly storing the end value for sub-iterator that we don't use for anything else
    * also save most `get(...)` calls for this sub-iterator
* avoid redundant `start()` call by grabbing `start()` directly from `nextInterval`
* replace `getFirst()` with `get(0)`, it looks nice but has needless overhead in my testing (not sure why, but profiling clearly shows it to be slower, maybe just a result of having `get()`'s code hot in the cache with a higher likelihood or something esoteric like that)
* avoid using an iterator for loop for a random access list, this is probably the biggest win in this PR
2024-10-21 16:38:39 +02:00
Armin Braun 75cdf22100 Simplify PForUtil construction and cleanup its code gen a little (#13932)
Generate cleaner code for PForUtil that has no dead parameters.

Also:
PForUtil instances always create their own `ForUtil`, so we can inline
that into the field declaration. Also, we can save cycles
for accessing the input on PostingsDecodingUtil.

Surprisingly, the combination of these cleanups yields a small but
statistically fully visible speedup that the compiler isn't able to get
to on its own it seems.
2024-10-21 15:20:18 +02:00
Armin Braun 750d53c4d3 Use RandomAccessInput instead of seeking in Lucene90DocValuesProducer (#13894)
We use manual seeking and reading instead of random access in this class.
That seems just unnecessarily complicated.
2024-10-21 15:11:19 +02:00
Ignacio Vera 051997b166 Use growNoCopy when copying bytes in BytesRefBuilder (#13930) 2024-10-21 07:37:35 +02:00
Adrien Grand 1a7514f9dd Revert "Better handle dynamic pruning when the leading clause has a single impact block. (#13904)"
This reverts commit 92c4f51224.
2024-10-16 15:15:27 +02:00
Armin Braun cebf1e7259 Avoid slicing memory segments unnecessarily (#13906)
No point in copying the memory segment instances when slicing, they are stateless.
2024-10-15 20:57:50 +02:00
Adrien Grand 7a14a77d90 Skip madvise calls on tiny inner files of compound files. (#13917)
This commit skips `madvise` calls on inner files of compound files that are
smaller than the page size.
2024-10-15 16:18:05 +02:00
Adrien Grand 92c4f51224 Better handle dynamic pruning when the leading clause has a single impact block. (#13904)
`BlockMaxConjunctionBulkScorer` only checks if it can early exit based on
impacts once per window, and windows are computed using impact blocks of the
leading clause. So this logic is defeated if the leading clause produces a
single block (e.g. `ConstantScoreQuery`). This commit addresses this problem by
artificially lowering the window size to contain ~128 docs of the leading
clause.
2024-10-15 16:17:37 +02:00
zhouhui 5727b8ce59 Optimize convert byte2int. (#13889) 2024-10-15 16:13:06 +02:00
Adrien Grand 8ad66899bc Make MaxScoreBulkScorer repartition scorers when the min competitive increases. (#13800)
MaxScoreBulkScorer partitions scorers into a set of essential scorers and a set
of non-essential scorers, depending on the maximum scores produced by scorers
and on the current minimum competitive score. An increase of the minimum
competitive score has the potential to yield a more favorable partitioning, but
repartitioning can also be expensive.

In order to repartition when necessary while avoiding to repartition too often,
this PR tracks the minimum value of the minimum competitive score that would
produce a more favorable partitioning, and repartitions scorers whenever the
minimum competitive score exceeds this threshold.
2024-10-15 15:20:55 +02:00
Adrien Grand b8bfffa368 Only call madvise when necessary. (#13907)
This commit tries to save calls to `madvise` which are not necessary, either
because they map to the OS' default, or because the advice would be overridden
later on anyway. I have not noticed specific problems with this, but it seems
desirable to keep calls to `madvise` to a minimum.

As a consequence:
 - Files that are open with `ReadAdvice.NORMAL` do not call `madvise` since
   this is the OS' default.
 - Compound files are always open with `ReadAdvice.NORMAL`, and the actual is
   only set when opening sub files of these compound files.

To make the latter less trappy, the `IOContext` parameter has been removed from
`CompoundFormat#getCompoundReader`.
2024-10-15 14:14:45 +02:00
Luca Cavanna fbe5757d4c Align TestGenerateBwcIndices.java with AddBackcompatindices.py (#13911)
We updated TestGenerateBwcIndices to create int7 HNSW indices instead of int8 with #13874.
The corresponding python code part of the release wizard needs to be updated accordingly.
2024-10-15 13:40:43 +02:00
Luca Cavanna ac972a97c1 Add back-compat indices for 10.0.0 2024-10-14 23:03:51 +02:00
Luca Cavanna 0f8f1a1ca4 Add 10.0.1 section to CHANGES.txt 2024-10-14 22:10:24 +02:00
Luca Cavanna b45624fafc Update year in copyright 2024-10-14 18:00:25 +02:00
Armin Braun 28798e8768 Dry up EverythingEnum and BlockDocsEnum in Lucene912PostingsReader (#13901)
It's in the title, extracting shared parts across both classes.
Almost exclusively mechanical changes with the exception of the introduction
of an array summing util.
2024-10-14 17:34:34 +02:00
Nhat Nguyen 518c76b51a
Avoid allocating liveDocs for no soft-deletes (#13895) (#13903)
Backport of #13895 to 10x

This is a continuation of #13588, where we avoided allocating liveDocs 
for segments that have the __soft_deletes field but no values in it.
However, that PR only addressed the reading side. This change fixes the
writing scenario with IndexWriter.

Relates #13588
2024-10-14 07:39:31 -07:00
Luca Cavanna 97bfd8b673 DOAP changes for release 10.0.0 2024-10-14 14:58:05 +02:00
Prudhvi Godithi 0651e69fb2 IndexOrDocValuesQuery in query highlighting (#13902)
Signed-off-by: Prudhvi Godithi <pgodithi@amazon.com>
2024-10-14 14:30:10 +02:00
Armin Braun e99db4e954 Dry up both the two ImpactsEnum Implementation ins Lucene912PostingsReader (#13892)
These two share a lot of code, in particular the impacts implementation is 100% identical.
We can save a lot of code and potentially some cycles for method invocations by
drying things up. The changes are just mechanical field movements with the following exceptions:

1. One of the two implementations was using a bytes ref builder, one a bytes ref for holding the
serialized impacts. The `BytesRef` variant is faster so I used that for both when extracting.
2. Some simple arithmetic simplifications around the levels that should be obvious.
3. Removed the the logic for an index without positions in `BlockImpactsPostingsEnum`, that was dead code,
we only set this thing up if there's positions.
2024-10-12 15:52:52 +02:00
Armin Braun a6a6519ee7 Lazy initialize ForDeltaUtil and ForUtil in Lucene912PostingsReader (#13885)
Lazy initialize these fields. They consume/cause a lot of memory/GC because they are
allocated frequently (~7% of all allocations in luceneutil's wikimedia medium run for me).
This does not cause any measurable slowdown as far as runtime is concerned and since these are not
even needed for all instances (in fact they are rarely used in the queries the benchmark explores)
save qutie a few CPU cycles for collecting and allocating them.
2024-10-12 12:43:27 +02:00
panguixin 8180f43678 Remove broken .toArray from Long/CharObjectHashMap entirely (#13884) 2024-10-11 08:52:06 +02:00
Dawid Weiss af3200ae34 Remove broken .toArray from IntObjectHashMap entirely (#13876) 2024-10-11 08:51:55 +02:00
Rene Groeschke d888f6d5a7 Make generated archive files reproducible (#13835)
* Make generated archive files reproducible

This should ensure deterministic archive files and fix issues with changing checksums even
though the codebase has not changed
2024-10-10 11:50:18 +02:00
zhouhui 9a3467d352 Add reopen method in PerThreadPKLookup (#13596)
Co-authored-by: Adrien Grand <jpountz@gmail.com>
2024-10-10 10:30:58 +02:00
Michael McCandless 250bb03aac Fix 9.12.0 backcompat break (Lucene 9.12.0 cannot read 9.11.x indices written with quantized HNSW, `Lucene99HnswScalarQuantizedVectorsFormat`) (#13874)
* carefully regenerate the int8_hnsw bwc indices so that they do in fact use Lucene99ScalarQuantizedVectorsFormat ... when running TestInt8HnswBackwardsCompatibility it now fails (as expected) on 9.11.0 and 9.11.1 bwc indices, but not on 9.10.0

* rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization

* actually fix the bwc bug: only allow compress=true when bits is 7 or 8 in HNSW scalar quantization

* tidy

* Revert "rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization"

This reverts commit eeb3f8a668.

* Reapply "rename int8 -> int7 bwc tests since we are actually testing 7 bit quantization"

This reverts commit 3487c4210b.

* #13880: add test to verify the int7 quantized indices are in fact using quantized vectors not float32

* bump 9.12.x version to 9.12.1 and add bwc indices for 9.12.0

* remove duplicate 9.12.0 Version constant

* revert changes to index.9.12.0-cfs.zip, index.9.12.0-nocfs.zip, sorted.9.12.0.zip

* remove unused bwc index

Closes #13867
Closes #13880
2024-10-09 19:28:30 -04:00
Adrien Grand a2a751cbac Fix flakiness issues with TestTieredMergePolicy. (#13881)
The two seeds at #13818 had different root causes:
 - The test allows the number of segments to go above the limit, only if none
   of the merges are legal. But there are multiple reasons why a merge may be
   illegal: because it exceeds the max doc count or because it is too imbalanced.
   However these two things were checked independently, so you could run into
   cases when the test would think that there are legal merges from the doc count
   perspective and from the balance perspective, but all legal merges from the doc
   count perspective are illegal from the balance perspective and vice-versa. The
   test now checks that there are merges that are good wrt these two criteria
   at once.
 - `TieredMergePolicy` allows at least `targetSearchConcurrency` segments in an
   index. There was a bug in `TieredMergePolicy` where this condition is
   applied after "too big" segments have been removed, so it effectively allowed
   more segments than necessary in the index.

Closes #13818
2024-10-09 17:29:13 +02:00
Adrien Grand b6512a4680 Disable CFS in TestDefaultCodecParallelizesIO. (#13875)
`SerialIODirectory` doesn't count reads to files that are open with
`ReadAdvice#RANDOM_PRELOAD` as these files are expected to be loaded in memory.
Unfortunately, we cannot detect such files on compound segments, so this test
now disables compound segments.

Closes #13854
2024-10-09 16:25:16 +02:00
Adrien Grand dfa77b931c Reuse Impacts instances across invocations. (#13878)
Our `ImpactsEnum` currently return a new object on every call to
`getImpacts()`, which shows up in nightly profiles.
2024-10-09 16:25:16 +02:00
Mayya Sharipova fb3065b4a6
Allow open-ended ranges in Intervals range (#13873)
Currently IntervalsSource.range function closed intervals.
This will allow open-ended ranges

Relates to #13562
2024-10-09 08:05:49 -04:00
Dawid Weiss ac91b32a26 Adds changes entry and migration comments #13820. 2024-10-09 11:48:54 +02:00
Luca Cavanna 767021e3a0 Move changes entry for #13845 to 10.0.0 2024-10-09 11:38:51 +02:00
Zhang Chao 56c9d1cbeb Move DataInput.readGroupVInts into GroupVIntUtil (#13830) 2024-10-09 09:38:50 +02:00
Armin Braun c85458887c Reduce allocations in ByteBuffersDataOutput.writeString (#13863)
There's no need to allocate a byte array when serializing to heap
buffers and the string fits the remaining capacity without further bounds checks.
If it doesn't fit we could technically do better than the current
`writeLongString` and avoid one round of copying by chunking the string
but that might not be worth the complexity.
In either case we can calculate the utf8 length up-front.
While this costs extra cycles (in the small case) for iterating the string twice it saves
creating an oftentimes 3x oversized byte array, a `BytesRef`, field
reads from the `BytesRef`, copying from it to the buffer and the associated GC with cleaning it up.
Theory and some quick benchmarking suggests this version is likely faster for any string
length than the existing code.
2024-10-09 09:09:36 +02:00
Armin Braun 801c71d1ff Speedup OrderedIntervalsSource (#13871)
Looking up the same indices out of a list is very costly, also better
keep things in local variables (likely registers) where possible.
2024-10-08 19:08:41 +02:00
Armin Braun ee70793fa8 Misc cleanups postings codec (#13862)
Removing some obvious dead code, turning some fields into locals that don't need to be fields, making things static and deduplicating duplicate "scratch" field.
2024-10-08 19:04:14 +02:00
Armin Braun 7c6237a912 Make MaxScoreAccumulator use primitive long instead Object return (#13866)
An object return inside hot code like this is needlessly wasteful.
Escape analysis doesn't catch this one and we end up allocating many GB
of throwaway objects during benchmark runs. We might as well use two
utility methods and accumulate the raw value.
2024-10-08 12:50:44 +02:00
Armin Braun 22638ec8a2 Reduce TaskExecutor overhead (#13861)
The `TaskGroup` class is redundant, the futures list can be a local variable
shared by the tasks (this also removes any need for making it read-only).
2024-10-08 11:07:40 +02:00
Zhang Chao e10e9d136d Reduce long[] array allocation for bitset in readBitSetIterator (#13828) 2024-10-08 10:25:07 +08:00
Armin Braun 6a2d5354a5 Speedup MaxScoreCache.computeMaxScore (#13865)
This shows up as allocating tens of GB for iterators in the nightly
benchmarks. We should go the zero-allocation route for RandomAccess
lists, which I'd expect 100% of them will be here for a bit of a speedup.
2024-10-07 14:40:10 +02:00
Uwe Schindler 17cbb985a1 Upgrade forbiddenapis to version 3.8 2024-10-07 12:26:17 +02:00
Christine Poerschke cbd8b5218a PR 13757 follow-up: add missing with-discountOverlaps Similarity constructor variants, CHANGES.txt entries (#13845)
(cherry picked from commit dab731175c)
2024-10-04 17:23:57 +01:00
Chris Hegarty 69dcf5823d Replace branch_9x references with branch_10x in workflows (#13855)
With the move of the main branch to 11, and the upcoming sunsetting of 9x, we need to replace branch_9x references with branch_10x in workflows.
2024-10-04 13:52:45 +01:00
정승한(Seunghan Jung)/Search Platform a29d12f417 Fix UnifiedHighlighter DefaultPassageFormatter for non-offset order passages (#13832)
The ellipsis should have been inserted in more scenarios.

(cherry picked from commit e3e3328a55)
2024-10-03 21:17:46 -04:00
Michael Sokolov fae57d03ca search on proper level when connecting graph components (#13846) 2024-10-03 14:41:55 +00:00
Michael Sokolov 8c9204d1cc add infostream status messages to HnswGraphBuilder.connectComponents (#13849) 2024-10-03 14:41:55 +00:00
Jim Ferenczi 0f2fac699a Prevent flattening of ordered and unordered interval sources (#13819)
This commit removes the flattening of ordered and unordered interval sources, as it alters the gap visibility for parent intervals. For example, ordered("a", ordered("b", "c")) should result in a different gap compared to ordered("a", "b", "c").

Phrase/Block operators will continue to flatten their sub-sources since this does not affect the inner gap (which is always 0 in the case of blocks).
2024-10-03 12:23:53 +01:00
Luca Cavanna 3ac1db6470 Adjust command to remove uploaded artifacts upon respin (#13853)
The command to remove uploaded artifacts from svn is missing a dash, hence it
fails as it does not match the name of the artifacts uploaded at the previous steps.
2024-10-03 00:19:29 +02:00
Luca Cavanna b32ccecedf Reassign the knn values iterator in TestSortingCodecReader (#13852) 2024-10-02 23:45:27 +02:00