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 2 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.

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]>
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?

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