Commit Graph

37263 Commits

Author SHA1 Message Date
RS146BIJAY bb55c6b374 Grouping segments during flushing 2024-05-25 00:44:36 +05:30
Kaival Parikh 13cf882677
Fix failing BaseKnnVectorQueryTestCase#testTimeout (#13283)
* Fix failing BaseKnnVectorQueryTestCase#testTimeout

* Also fix ParentBlockJoinKnnVectorQueryTestCase#testTimeout

---------

Co-authored-by: Kaival Parikh <kaivalp2000@gmail.com>
2024-04-10 20:43:01 -07:00
gf2121 203cf7b553
Simplify bytes arrays in NumericLeafComparator to long (#13246) 2024-04-10 16:57:56 +08:00
Adrien Grand 26fe2c4b9c
Move per-field vector and doc-values readers from TreeMap to HashMap. (#13284)
Our per-field vector and doc-values readers use `TreeMap`s but don't rely on
the iteration order, so these `TreeMap`s can be replaced with more
CPU/RAM-efficient `HashMap`s.

The per-field postings reader stays on a `TreeMap` since it relies on the
iteration order.
2024-04-09 15:59:10 +02:00
Dawid Weiss afe982b3ef
Schedule compileJava after the internal task if it affects source files (#13282) 2024-04-09 07:44:07 +02:00
Pulkit Gupta df0384c34f
Remove Accountable interface in KnnVectorsReader (#13255) 2024-04-08 13:51:42 +02:00
Adrien Grand 4c843fc9ae Update CHANGES after #13267. 2024-04-05 21:51:24 +02:00
Adrien Grand 1b98db5ca1
Propagate the flush IOContext to stored fields / term vectors writers when index sorting is enabled. (#13265)
This fixes index sorting to pass the correct `IOContext` to stored fields and
term vectors writers when index sorting is enabled. This is important for
things like `NRTCachingDirectory`.
2024-04-05 21:10:51 +02:00
Benjamin Trent 767bd3aa91
Revert version files to not include unreleased version (#13274) 2024-04-05 12:34:19 -04:00
Stefan Vodita 9ba4af7b88
Reduce duplication in taxonomy facets; always do counts (#12966)
This is a large change, refactoring most of the taxonomy facets code and changing internal behaviour, without changing the API. There are specific API changes this sets us up to do later, e.g. retrieving counts from aggregation facets.

1. Move most of the responsibility from TaxonomyFacets implementations to TaxonomyFacets itself. This reduces code duplication and enables future development. Addresses genericity issue mentioned in #12553.
2. As a consequence, introduce sparse values to FloatTaxonomyFacets, which previously used dense values always. This issue is part of #12576.
3. Compute counts for all taxonomy facets always, which enables us to add an API to retrieve counts for association facets in the future. Addresses #11282.
4. As a consequence of having counts, we can check whether we encountered a label while faceting (count > 0), while previously we relied on the aggregation value to be positive. Closes #12585.
5. Introduce the idea of doing multiple aggregations in one go, with association facets doing the aggregation they were already doing, plus a count. We can extend to an arbitrary number of aggregations, as suggested in #12546.
6. Don't change the API. The only change in behaviour users should notice is the fix for non-positive aggregation values, which were previously discarded.
7. Add tests which were missing for sparse/dense values and non-positive aggregations.
2024-04-05 12:28:47 +01:00
Robert Muir 02bc51a753
move TestBugInSomething to analysis.tests
This test is setup to reproduce complex failures from TestRandomChains,
e.g. it has SopFilter and other tools for debugging. But it still
resides in the analysis/common module and currently can't be used to
debug any TestRandomChains failures that use other modules (e.g. icu).

relates to #13271
2024-04-04 16:52:35 -04:00
Benjamin Trent 88c0909210
Test mute for issue #13272 (#13273) 2024-04-04 16:21:32 -04:00
Zach Chen 5b5a02d0cd
GITHUB-13218: Add migrate entry for Collector to CollectorManager migration (#13238) 2024-04-04 12:53:12 -07:00
Uwe Schindler f7db975fc4
Make the default ReadAdvice configurable by sysprop (#13264) 2024-04-04 18:42:31 +02:00
Adrien Grand 4ea2bae119
Use `ReadAdvice#RANDOM` when appropriate. (#13222)
This switches the following files to `ReadAdvice.RANDOM`:
 - Stored fields data file.
 - Term vectors data file.
 - HNSW graph.
 - Temporary file storing vectors at merge time that we use to construct the
   merged HNSW graph.
 - Vector data files, including quantized data files.

I hesitated using `ReadAdvice.RANDOM` on terms, since they have a random access
pattern when running term queries, but a more sequential access pattern when
running multi-term queries. I erred on the conservative side and did not switch
them to `ReadAdvice.RANDOM` for now.

For simplicity, I'm only touching the current codec, not previous codecs. There
are also some known issues:
 - These files will keep using a `RANDOM` `ReadAdvice` at merge time. We need
   some way for merge instances to get an updated `IOContext`? We have the same
   problem with `IOContext#LOAD` today.
 - With quantized vectors, raw vectors don't have random access pattern, but it
   was challenging to give raw vectors a sequential access pattern when there
   are quantized vectors and a random access pattern otherwise. So they assume a
   random access pattern all the time.
2024-04-04 18:31:13 +02:00
Benjamin Trent 6104c86abc
Correct quantized HNSW validation to be in-line with HNSW (#13263)
When intra-merge parallelism was introduced, the validation that numWorkers must ==1 with a null executor service was removed from Lucene99HnswVectorsFormat. However, I forgot to remove that validation from Lucene99HnswScalarQuantizedVectorsFormat.

This corrects that mistake, allowing Lucene99HnswScalarQuantizedVectorsFormat and Lucene99HnswVectorsFormat to take advantage of the merge-schedulers intra-merge threading.
2024-04-04 12:05:25 -04:00
Pulkit Gupta 2ee537ce16
Convert BooleanClause class to record class (#13261) 2024-04-04 17:51:48 +02:00
Adrien Grand a2676b1b26
Use ReadAdvice.RANDOM by default. (#13244)
This switches the default `ReadAdvice` from `NORMAL` to `RANDOM`, which is a better fit for the kind of access pattern that Lucene has. This is expected to reduce page cache trashing and contention on the page table.

`NORMAL` is still available, but never used by any of the file formats.
2024-04-04 16:45:41 +02:00
Robert Muir 54a2e11434
upgrade icu4j to 74.2 (#13239)
* fix regeneration, upgrade icu jar, fully regenerate sources, tests pass
* Upgrade RBBI grammar to match 74.2 (add instructions on how to do this)
* Make use of Script_Extensions property in tokenization
* document and test nfkc_scf form
* update tokenizer for improved text in UAX#24 5.2
* use indic syllablic category for myanmar tokenizer instead of relying on Gc
2024-04-04 08:35:25 -04:00
Michael Sokolov 342c814caf
BaseVectorSimilarityQueryTestCase assumes connected hnsw graph (#13260) 2024-04-04 08:31:02 -04:00
Kaival Parikh df154cdc22
Add timeout support to AbstractKnnVectorQuery (#13202)
* Add timeout support to graph searches in AbstractKnnVectorQuery

* Also timeout exact searches

* Return partial KNN results

* Add tests for partial KNN results

- Refactor tests to base classes
- Also timeout exact searches in Lucene99HnswVectorsReader

* Add CHANGES.txt entry and fix some comments

---------

Co-authored-by: Kaival Parikh <kaivalp2000@gmail.com>
2024-04-03 06:53:24 -07:00
Benjamin Trent 45c4f8c052
Adds bwc indices for 9.10.1 (#13258) 2024-04-03 07:42:24 -04:00
Zhang Chao 9c9f934a7c
Simplify PackedInts#longCount (#13256) 2024-04-03 16:46:53 +08:00
Benjamin Trent 07d3be59af
Expand scalar quantization with adding half-byte (int4) quantization (#13197)
This PR is a culmination of some various streams of work:

 - Confidence interval optimizations, unlocked even smaller quantization bytes.
 - The ability to quantize down smaller than just int8 or int7
 - Adding an optimized int4 (halfbyte) vector API comparison for dot-product.

The idea of further scalar quantization gives users the choice between:

 - Further quantizing to gain space through compressing the bits into single byte values
 - Or allowing quantization to give guarantees around maximal values that afford faster vector operations.

I didn't add more panama vector APIs as I think trying to micro-optimize int4 for anything other than dot-product was a fools errand. Additionally, I only focused on ARM. I experimented with trying to get better performance on other architectures, but didn't get very far, so I fall back to dotProduct.
2024-04-02 13:38:40 -04:00
Mike McCandless bf193a7125 #13149: move CHANGES entry under 9.11.0 2024-04-02 09:59:34 -04:00
Anton Hägerstrand 4eeb3a792d
Made DocIdsWriter use DISI when reading documents with an IntersectVisitor (#13149)
* Made DocIdsWriter use DISI when reading documents with an IntersectVisitor.

Instead of calling IntersectVisitor.visit for each doc in the
readDelta16 and readInts32 methods, create a DocIdSetIterator
and call IntersectVisitor.visit(DocIdSetIterator) instead.

This seems to make Lucene faster at sorting and range querying
tasks - the hypothesis being that it is due to fewer virtual calls.

* Spotless

* Changed bulk iteration to use IntsRef instead.

* Clearer comment.

* Decrease cost outside loop

* Added test to make inverse intsref be used.

* Wording improvement in javadoc.

* Added CHANGES.txt entry.
2024-04-02 09:44:31 -04:00
cinsttool 7c3ee797a9
Fix container inefficiencies in FieldInfos.java (#13254) 2024-04-02 14:12:17 +02:00
Mike McCandless baecaf556f Fix PR number reference (#11722 -> #11888) 2024-04-01 09:52:10 -04:00
Mike McCandless 7eec0a4847 #11722: add CHANGES.txt entry 2024-04-01 09:46:24 -04:00
zhouhui bf074502df
[Fix] Binary search the BlockTree term entries when all suffixes have the same length in a leaf block. (#11888)
* Binary search the entries when all suffixes have the same length in a leaf block.

* add comment on allEqual.

* BackwardsCompatibility: keep the same logic on fillTerm and SeekStatus(NOT_FOUND, END).

* Update comments: modify scan to binary search.

* Add unit test for binarySearchTermLeaf.

* Format code.

* Assert the value of termsEnum.term() is correct after seeking.

* Add CHANGES entry.

* Clarify "leaf block _of the terms dict_"

* Set suffixesReader's position.

* Advance to the greater term If binary search ended at the less term.

* Assert termsEnum's position after seeking.

* Tidy.

* Advance to the greater term if binary search ended at the less term: nextEnt plus 1.

* Advance to the greater term if binary search ended at the less term and greater term exists.

* Add test case: target greater than the last entry of the matched block.

* Move test case that target greater than the last entry of the matched block to TestLucene90PostingsFormat.

* Move test case for target greater than the last entry of the matched block to TestLucene99PostingsFormat

* Clarify code.

* Replace ternary with verbose if.

* Replace seekExact with seekCeil.

* Replace division by 2 with logical right shift.

* Remove assert ste.termExists.

* Clarify code.

* Remove stale change entry.

* Fix comment.

---------

Co-authored-by: Adrien Grand <jpountz@gmail.com>
2024-04-01 09:14:14 -04:00
Armin Braun 42f2da5fe2
Fix ram estimate and its test for PackedInts.NullReader singleton (#13250)
Correct estimate for singleton to return `0` and use custom accumulator in tests to
fix assertions. Tried not doing this in #13232 but turns out we need a little complexity here
since the singleton is recognized by the `RamUsageTester` in so far that is only counted
once if it shows up repeatedly in an array or so.

fixes #13249
2024-04-01 07:56:38 -04:00
Robert Muir e2110e0b8e
Add regeneration workaround to the docs 2024-03-30 09:52:21 -04:00
Benjamin Trent c0d81932df
Fix vector type check for diversified knn search (#13235)
I repeatably saw some test failures related to `TestParentBlockJoin[Byte|Float]KnnVectorQuery#testVectorEncodingMismatch`. This commit fixes those test failures and actually checks the field type.
2024-03-29 13:49:58 -04:00
Benjamin Trent 6d120c49a4
Add missing 9.10.1 in the Version file (#13248) 2024-03-29 11:52:01 -04:00
Kaival Parikh d6eb126871
Delete TimeLimitingCollector after deprecation (#13243)
Co-authored-by: Kaival Parikh <kaivalp2000@gmail.com>
2024-03-29 15:38:44 +01:00
Uwe Schindler ce978d7646
Cleanup Javadocs of IOContext and use simpler ctor for DEFAULT (#13247) 2024-03-29 15:08:16 +01:00
Uwe Schindler 11eb0cc317
Optimization: Use precalculated IOContexts for withReadAdvice() to not create new instances all the time (#13245) 2024-03-29 14:21:11 +01:00
Benjamin Trent 69172b14ce
Use FieldInfo vector similarity in knn readers (#13237)
Both the KnnWriters & FieldInfo keep track of the vector similarity used by a given field. This commit ensures they are the same and utilizes the FieldInfo one (which, while these are enums, are exactly the same).
2024-03-29 09:10:39 -04:00
Armin Braun c41eb227ea
Introduce singleton for PackedInts.NullReader of size 256 (#13232)
Size 256 is very common here throguh the monotonic long values default
page size. In ES we're seing many MB O(10M) of duplicate instances of this
size relatively quickly.
=> adding a singleton for it to save some heap
2024-03-29 13:54:04 +01:00
Adrien Grand 32d692049f
Replace (IO)Context#READ with (IO)Context.DEFAULT. (#13242)
`DEFAULT` doesn't mean much today and could be used whenever `READ` is used. So
let's use `DEFAULT` all the time instead and remove `READ`.
2024-03-29 10:37:26 +01:00
Adrien Grand 4a3f4cfe97
Make `OneMerge#reorder` preserve blocks. (#13128)
This updates `IndexWriter` to only call `OneMerge#reorder` when it has a chance
to preserve the block structure, ie. either there are no blocks or blocks are
identified by a parent field.

Furthermore, `MockRandomMergePolicy` is updated to preserve the block structure
when a parent field is configured.
2024-03-29 10:07:22 +01:00
Adrien Grand a807772d41
More consistently use a SEQUENTIAL ReadAdvice for merging. (#13229)
Merging `IOContext`s use a `SEQUENTIAL` `ReadAdvice`. However, some file
formats hardcode `IOContext.LOAD` for some of their files, which silences the
whole merging context, in particular the `SEQUENTIAL` `ReadAdvice`.

This PR switches file formats to
`ioContext.withReadAdvice(ReadAdvice.RANDOM_PRELOAD)` so that merges will use a
`SEQUENTIAL` `ReadAdvice` while searches will use a `RANDOM_PRELOAD`
`ReadAdvice`.

This is not a huge deal for `RANDOM_PRELOAD`, which is only used for very small
files. However, this change becomes more relevant for the new `RANDOM`
`ReadAdvice` as we would like merges to keep using a `SEQUENTIAL` `ReadAdvice`.
2024-03-29 09:14:14 +01:00
Kaival Parikh 878d233bc1
Mark TimeLimitingCollector as deprecated (#13220)
Co-authored-by: Kaival Parikh <kaivalp2000@gmail.com>
2024-03-29 09:12:48 +01:00
Tommaso Teofili 42a5ff6ace
Test KNN query works seamlessly regardless of underlying format (#13225)
* Test Knn query on different vector formats
2024-03-29 08:28:33 +01:00
Armin Braun 6cba773318
Use singleton for all-zeros DirectMonotonicReader.Meta (#13224)
Having a single block of all zeros is a fairly common case that is using
a lot of heap for duplicate instances in some use-cases in ES.
=> read a singleton for it to save the duplication
2024-03-29 07:23:00 +01:00
Robert Muir 8f4e449669
Add RomanianNormalizationFilter (#13233) 2024-03-28 18:35:39 -04:00
Robert Muir a7e916223c
remove unnecessary chmod+x, file is marked executable in snowball git 2024-03-28 16:43:47 -04:00
Robert Muir 3553769463
remove now-unnecessary snowball mojibake hack (#13231) 2024-03-28 16:40:55 -04:00
Robert Muir 11712a3364
remove unsupported snowball algorithms (#13230) 2024-03-28 16:37:18 -04:00
Trey Jones 69d846f700
Add Romanian stopwords with s&t with comma (#12172)
Romanian uses s&t with commas (ș/ț), but for a long time those weren't available, so s&t with cedilla (ş/ţ) were used. Both are still in use, but the comma forms are much more common now. Both should be supported in stopword lists.
2024-03-28 10:35:39 -04:00