[
https://issues.apache.org/jira/browse/LUCENE-6785?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adrien Grand updated LUCENE-6785:
---------------------------------
Attachment: LUCENE-6785-alt.patch
Here is a patch for the alternative idea (lucene-core only).
> Consider merging Query.rewrite() into Query.createWeight()
> ----------------------------------------------------------
>
> Key: LUCENE-6785
> URL: https://issues.apache.org/jira/browse/LUCENE-6785
> Project: Lucene - Core
> Issue Type: Improvement
> Reporter: Alan Woodward
> Attachments: LUCENE-6785-alt.patch, LUCENE-6785.patch,
> LUCENE-6785.patch
>
>
> Prompted by the discussion on LUCENE-6590.
> Query.rewrite() is a bit of an oddity. You call it to create a query for a
> specific IndexSearcher, and to ensure that you get a query implementation
> that has a working createWeight() method. However, Weight itself already
> encapsulates the notion of a per-searcher query.
> You also need to repeatedly call rewrite() until the query has stopped
> rewriting itself, which is a bit trappy - there are a few places (in
> highlighting code for example) that just call rewrite() once, rather than
> looping round as IndexSearcher.rewrite() does. Most queries don't need to be
> called multiple times, however, so this seems a bit redundant. And the ones
> that do currently return un-rewritten queries can be changed simply enough to
> rewrite them.
> Finally, in pretty much every case I can find in the codebase, rewrite() is
> called purely as a prelude to createWeight(). This means, in the case of for
> example large BooleanQueries, we end up cloning the whole query structure,
> only to throw it away immediately.
> I'd like to try removing rewrite() entirely, and merging the logic into
> createWeight(), simplifying the API and removing the trap where code only
> calls rewrite once. What do people think?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]