mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-05 20:48:22 +00:00
Currently we support empty query clauses like the filter in "constant_score" : { "filter" : { } } How these clauses are handled depends on the surrounding query. They later are either ignored, converted to match all or no documents or passed up further in the query hierarchy. During parsing these claues are currently represented as EmptyQueryBuilders. When not handled anywhere else, these special cases need to be checked for on the shard when building the lucene query. This is trappy, so this PR changes the parsing of compound queries. Instead of returning QueryBuilder, the core query parsing method QueryShardContext#parseInnerQueryBuilder() now return an Optional which can be empty in the case of empty query clauses. This has the advantage of forcing callers to deal with this sooner or later. When encountering empty Optionals, compound query builders now have the choice to ignore them, pass them on or rewrite to a different query, depending on context.