Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add FilterFieldType #17627

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Conversation

msfroh
Copy link
Collaborator

@msfroh msfroh commented Mar 18, 2025

Description

This class allows developers (in core or plugins) to wrap an existing field type, delegating all behavior by default, overriding specific methods as needed.

See linked issue for more details.

Related Issues

Resolves #17624

Check List

  • Functionality includes testing.
  • API changes companion pull request created, if applicable.
  • Public documentation issue/PR created, if applicable.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Copy link
Contributor

❌ Gradle check result for 5180b1a: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

@kkewwei
Copy link
Contributor

kkewwei commented Mar 19, 2025

It make sense to me. But it seems not delegate all methods, such as fielddataBuilder. Also it seems don't solve the problem mentioned in #17575, it need the indexedValueForSearch, only if we also support FilterTermBasedFieldType?

@bzhangam
Copy link

indexedValueForSearch

indexedValueForSearch will not be directly invoked to process query. It will be invoked through function like termQuery. Since we delegate the termQuery it will use the implementation of indexedValueForSearch of the delegate.

@msfroh
Copy link
Collaborator Author

msfroh commented Mar 20, 2025

It make sense to me. But it seems not delegate all methods, such as fielddataBuilder. Also it seems don't solve the problem mentioned in #17575, it need the indexedValueForSearch, only if we also support FilterTermBasedFieldType?

In #17575, it doesn't actually need indexedValueForSearch, since that's internal to the implementation of the delegated field type (since that's a helper used by the various *Query methods).

You're absolutely right about fielddataBuilder -- not sure how I missed that, since I tried overriding all methods from MappedFieldType. I intentionally avoided implementing typeName(), because I believe that the filtered field type should have its own type name.

I'll add a unit test that uses reflection to enforce overrides of all methods to catch mistakes if anyone adds more methods to MappedFieldType.

import java.util.function.Function;
import java.util.function.Supplier;

public abstract class FilterFieldType<T extends MappedFieldType> extends MappedFieldType {
Copy link
Contributor

Choose a reason for hiding this comment

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

Please add java docs on this class, with some examples on how to use it. This is a good addition in core.

Copy link
Contributor

Choose a reason for hiding this comment

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

should we annotate this with @publicapi?

Copy link
Contributor

❌ Gradle check result for bcd79b6: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

msfroh added 3 commits March 24, 2025 12:10
This class allows developers (in core or plugins) to wrap an existing
field type, delegating all behavior by default, overriding specific
methods as needed.

Signed-off-by: Michael Froh <[email protected]>
After thinking about it some more, the type parameter doesn't really
give us anything.

Signed-off-by: Michael Froh <[email protected]>
@msfroh msfroh force-pushed the filter_field_type branch from bcd79b6 to 3c8423a Compare March 24, 2025 23:00
Copy link
Contributor

✅ Gradle check result for 3c8423a: SUCCESS

Copy link

codecov bot commented Mar 25, 2025

Codecov Report

Attention: Patch coverage is 0% with 53 lines in your changes missing coverage. Please review.

Project coverage is 72.46%. Comparing base (6d53f9d) to head (3c8423a).
Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
...a/org/opensearch/index/mapper/FilterFieldType.java 0.00% 52 Missing ⚠️
...a/org/opensearch/index/mapper/MappedFieldType.java 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main   #17627      +/-   ##
============================================
+ Coverage     72.40%   72.46%   +0.06%     
- Complexity    65828    65874      +46     
============================================
  Files          5316     5323       +7     
  Lines        305294   305526     +232     
  Branches      44289    44309      +20     
============================================
+ Hits         221033   221399     +366     
+ Misses        66187    65995     -192     
- Partials      18074    18132      +58     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Enhancement or improvement to existing feature or request Search:Query Capabilities
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature Request] Make it easier to wrap existing field types
4 participants