Skip to content

Index-time scripted fields to be fetched from doc values #122376

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

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

Conversation

javanna
Copy link
Member

@javanna javanna commented Feb 12, 2025

Certain field types support index-time scripts. When a script is provided for them, values for such fields are not accepted in incoming documents. Instead, the script is executed at index time and the result of the script is indexed. There is no trace of the resulting value in _source, but such calculated fields can be queried, aggregated on etc.

The described calculated fields can also be retrieved as part of the fetch phase, using the fields API or docvalue_fields. The fetch fields api is though re-executing the script at fetch time as opposed to retrieving the value that is in the index. That causes discrepancy between indexing, querying and fetching. This PR addresses that by retrieving the value from doc values. There's a couple of limitations with this approach:

  • values can no longer be fetched once doc_values are turned off for that field, as these are not stored in _source like ordinarily ingested fields
  • fetching from doc values introduces format discrepancies as well sorting, same as docvalue_fields. That makes these calculated fields look different at fetch time compared to other fields

These limitations are not great, but I think that fixing the bug of not re-running the script at fetch time is valuable. Re-executing the script at fetch is unexpected: users may have indexed such scripted fields for better performance for instance, and reexecuting the script may lead to a different result, depending on the content of the script.

Closes #119939

@javanna javanna added v8.18.1 v8.19.0 v8.17.3 auto-backport Automatically create backport pull requests when merged :Search Foundations/Search Catch all for Search Foundations >bug labels Feb 13, 2025
@javanna javanna marked this pull request as ready for review February 13, 2025 11:16
@javanna javanna changed the title WIP: index-time scripted fields to be fetched from doc values Index-time scripted fields to be fetched from doc values Feb 13, 2025
@javanna javanna added test-full-bwc Trigger full BWC version matrix tests and removed WIP labels Feb 13, 2025
Copy link
Contributor

@andreidan andreidan left a comment

Choose a reason for hiding this comment

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

Thanks for working on this Luca!

Extra props for the PR description and all the tests ❤️

LGTM from a code changes perspective - pending other approvals.

@elasticsearchmachine elasticsearchmachine added the Team:Search Foundations Meta label for the Search Foundations team in Elasticsearch label Feb 17, 2025
@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-search-foundations (Team:Search Foundations)

@elasticsearchmachine
Copy link
Collaborator

Hi @javanna, I've created a changelog YAML for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
auto-backport Automatically create backport pull requests when merged >bug :Search Foundations/Search Catch all for Search Foundations Team:Search Foundations Meta label for the Search Foundations team in Elasticsearch test-full-bwc Trigger full BWC version matrix tests v8.16.7 v8.17.7 v8.18.2 v8.19.0 v9.1.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Indexed runtime field is executed at query time, instead of being read from disk.
3 participants