serhiy-bzhezytskyy opened a new pull request, #69:
URL: https://github.com/apache/solr-orbit/pull/69

   ### Description
   
   `_translate_query_node` folded `gt` into `gte` and `lt` into `lte`, then 
always emitted square brackets:
   
   ```python
   lo = bounds.get("gte", bounds.get("gt", "*"))
   hi = bounds.get("lte", bounds.get("lt", "*"))
   ...
   return f"{field}:[{lo} TO {hi}]"
   ```
   
   So every translated range came out inclusive at both ends, and an exclusive 
bound in the source workload
   silently became an inclusive one. Solr supports both spellings — `[a TO b]` 
and `[a TO b}` — so nothing
   about the engine required this.
   
   Effect on a shipped workload. `nyc_taxis`'s `range` operation asks upstream 
for `{"gte": 5, "lt": 15}`,
   and the conversion produces `total_amount:[5 TO 15]`, which also matches 
`total_amount == 15`:
   
   | corpus | `[5 TO 15]` | `lt: 15` | diff |
   |---|---:|---:|---:|
   | `documents-1k.json` (what `--test-mode` downloads) | 576 | 573 | 3 |
   | Bernoulli sample of 300,649 documents | 191,735 | 191,441 | 294 |
   
   The three extra documents in the 1k corpus are exactly those with 
`total_amount == 15`:
   
   ```
   total_amount 15.0, trip_distance  0.13, pickup 2015-01-01T00:35:03Z
   total_amount 15.0, trip_distance 19.79, pickup 2015-01-01T00:36:51Z
   total_amount 15.0, trip_distance  3.63, pickup 2015-01-01T00:38:45Z
   ```
   
   The same difference appears in OpenSearch on its own request body — changing 
`lt` to `lte` returns
   191,735 against 191,441 — so it is a property of the bound, not of either 
engine.
   
   This is not about timing: 12 runs of each query on the 1k corpus give 0–4 ms 
either way. It is that the
   converted operation matches documents the operation it was converted from 
excludes, which makes a
   Solr/OpenSearch comparison a comparison of two different questions. Note the 
direction — the conversion
   matches *more*, so Solr does work the operation does not ask for.
   
   The workload file that carries the current bound is fixed separately in 
`apache/solr-orbit-workloads`;
   each change stands alone, and only this one keeps the next conversion from 
reintroducing it.
   
   ### Issues Resolved
   
   Resolves #68
   
   ### Testing
   - [x] New functionality includes testing
   
   - `test_range_query` covered only `gte`/`lte` — the one combination the old 
code got right — and
     asserted with `assertIn("fare_amount", …)` and `assertIn("TO", …)`, which 
pass for `[5 TO 100]`,
     `[5 TO 100}` and `{5 TO 100}` alike. It is an `assertEqual` now.
   - Two new tests: `test_exclusive_bounds_use_curly_brackets` covers all four 
bound combinations, and
     `test_a_missing_bound_is_open_and_inclusive` covers the open-ended forms.
   - Verified red without the fix: with `main`'s `query.py` restored under the 
new tests, both fail —
     `'fare_amount:[5 TO 100}' != 'fare_amount:[5 TO 100]'` and
     `'fare_amount:{5 TO *]' != 'fare_amount:[5 TO *]'`. With the fix, both 
pass.
   - Full unit suite: `196 passed`.
   
   Worth flagging on its own: the existing test was green over this defect for 
two independent reasons, and
   either alone was enough. It exercised the only correct combination, and its 
assertions could not see the
   brackets even if it had exercised a wrong one.
   
   ---
   By submitting this pull request, I confirm that my contribution is made 
under the terms of the Apache
   2.0 license.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to