Skip to content

Conversation

BorisTkachenko
Copy link
Contributor

Details

Add new operators support for dictionary type filter

Change checklist

  • User facing
  • Documentation update

Issues

  • Resolves #
  • OPIK-2317

Testing

Added corresponding integration tests

Documentation

NA

@BorisTkachenko BorisTkachenko self-assigned this Sep 2, 2025
@Copilot Copilot AI review requested due to automatic review settings September 2, 2025 08:03
@BorisTkachenko BorisTkachenko requested a review from a team as a code owner September 2, 2025 08:03
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for new string comparison operators (NOT_CONTAINS, STARTS_WITH, ENDS_WITH) to dictionary type filters in the Opik backend. The change enables more flexible filtering capabilities for JSON dictionary fields beyond the existing CONTAINS operator.

Key changes:

  • Extended FilterQueryBuilder to support NOT_CONTAINS, STARTS_WITH, and ENDS_WITH operators for dictionary fields
  • Added comprehensive integration tests to verify the new operators work correctly with dictionary filtering

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
FilterQueryBuilder.java Added dictionary field type support for NOT_CONTAINS, STARTS_WITH, and ENDS_WITH operators using ClickHouse JSON_VALUE functions
ExperimentsResourceTest.java Added test cases for the three new operators to ensure proper functionality with dictionary filtering

Copy link
Contributor

github-actions bot commented Sep 2, 2025

Backend Tests Results

  192 files  ±  0    192 suites  ±0   38m 4s ⏱️ +50s
4 613 tests + 57  4 609 ✅ + 57  4 💤 ±0  0 ❌ ±0 
4 613 runs  +102  4 609 ✅ +102  4 💤 ±0  0 ❌ ±0 

Results for commit 237464e. ± Comparison against base commit 454c0bc.

This pull request removes 54 and adds 111 tests. Note that renamed tests count towards both.
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[376]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[377]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[378]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[379]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[380]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[381]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[382]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[383]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[384]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidOperatorForFieldType__thenReturn400(String, SpanFilter)[385]
…
com.comet.opik.api.resources.v1.priv.ExperimentsResourceTest$FindExperiments ‑ findByFilterMetadata(Operator, String, String)[15]
com.comet.opik.api.resources.v1.priv.ExperimentsResourceTest$FindExperiments ‑ findByFilterMetadata(Operator, String, String)[16]
com.comet.opik.api.resources.v1.priv.ExperimentsResourceTest$FindExperiments ‑ findByFilterMetadata(Operator, String, String)[17]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[274]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[275]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[276]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[277]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[278]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[279]
com.comet.opik.api.resources.v1.priv.SpansResourceTest$FindSpans ‑ whenFilterInvalidValueOrKeyForFieldType__thenReturn400(String, SpanFilter)[280]
…

@BorisTkachenko BorisTkachenko merged commit 7d6fd03 into main Sep 2, 2025
14 checks passed
@BorisTkachenko BorisTkachenko deleted the boryst/OPIK-2317-be-add-new-operators-for-dictionary-type-filter branch September 2, 2025 08:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants