cpoerschke commented on PR #2382:
URL: https://github.com/apache/solr/pull/2382#issuecomment-2088667529

   Thanks for the notes above, they helped me continue browsing the code to see 
how the `Presearcher` fits in and how the various objects are currently put 
together.
   
   So with indexing (via `MonitorUpdateRequestProcessor`) and searching (via ` 
ReverseSearchComponent` which uses `ReverseQueryParser`) both using the 
`Presearcher` but the presearcher actually being _stateless_ then I wonder why 
there's a shared presearcher and not separate ones for indexing and searching. 
Ease of configuration might be a reason? Or could one imagine a scenario where 
indexing and searching wish to use different presearcher types or settings?
   
   And then next I looked to understand more on how the 
`ReverseQueryParser[Plugin]` and `SimpleQueryParser` objects fit into the 
picture. Here I was temporarily a little confused, the `ReverseQueryParser` 
seems to do little parsing but more post-processing on the json-to-document 
parsing done by `ReverseSearchComponent.documentBatch` previously and 
`SimpleQueryParser` seems to wrap the default parser. Okay, but leaving that 
side-thought aside, back to the `Presearcher` focus of my session -- if there 
wasn't the `ReverseQueryParser[Plugin]` objects then what might own the 
`Presearcher` object? Both `MonitorUpdateRequestProcessor` and 
`ReverseSearchComponent` need to be configured by neither seems an obvious 
owner for a presearcher used by both.
   
   So next then considering the `ReverseSearchComponent` more closely:
   * `ReverseSearchComponent.process` jumps out as being a no-op.
   * Upon further consideration this appears to be because use-together-with 
the `QueryComponent` is assumed, is that correct?
   * If the `ReverseSearchComponent` must be used together with the 
`QueryComponent` then wondering what's the pros/cons of that versus 
`ReverseSearchComponent extends QueryComponent` inheritance instead.
   
   And if the `ReverseSearchComponent` itself and use of it must be configured 
e.g. `<arr name="last-components"> <str>reverseSearch</str> </arr>` in the 
request handler, then might an alternative be to have a reverse search handler 
class (with in-built default components) and with ownership of the presearcher? 
   
   ```
   public class ReverseSearchHandler extends SearchHandler {
   
     private Presearcher presearcher;
   
     @Override
     protected List<String> getDefaultComponents() {
       ArrayList<String> names = new ArrayList<>(2);
       names.add(QueryComponent.COMPONENT_NAME);
       names.add(ReverseSearchComponent.COMPONENT_NAME);
       return names;
     }
   
     @Override
     @SuppressWarnings("unchecked")
     public void inform(SolrCore core) {
       presearcher = ...
     }
   }
   ```
   
   All just some thinking-aloud type notes here really, as a next step I'll 
probably look further at the `ReverseQueryParser[Plugin]` and 
`SimpleQueryParser` classes.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to