[ 
https://issues.apache.org/jira/browse/SOLR-5730?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15117693#comment-15117693
 ] 

Christine Poerschke commented on SOLR-5730:
-------------------------------------------

bq. solrconfig.xml to support something like a <mergepolicy> element which will 
allow you to define a nested MP.

I also had noticed the similarity between the with-class-attribute 
{{sortMerges}} element and the existing {{mergePolicy}} element. The elements 
within a {{mergePolicy}} currently can be only primitive elements and 
mergePolicy-within-mergePolicy elements might be confusing from a users 
perspective?
\\
\\
----
\\
If we want wrapper merge policies support then I would instead favour 
'chaining' instead of 'nesting' of the solrconfig.xml elements, for example:
{code}
<indexConfig>
  <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
    <int name="segmentsPerTier">42</int>
  </mergePolicy>
  <mergePolicy class="org.apache.lucene.index.SortingMergePolicy">
    <str name="sort">timestamp desc</str>
  </mergePolicy>
</indexConfig>
{code}
SolrIndexConfig.java code outline:
{code}
private MergePolicy buildMergePolicyChain(IndexSchema schema) {
  MergePolicy policy = null;
  for (PluginInfo mergePolicyInfo : mergePolicyInfos) {
    String mpClassName = mergePolicyInfo.className;
    Class<?> mpClass = schema.getResourceLoader().findClass(mpClassName, 
MergePolicy.class);

    NamedList initArgs = mergePolicyInfo.initArgs;

    if (LogMergePolicy.class.isAssignableFrom(mpClass)) {
      LogMergePolicy logMergePolicy = 
schema.getResourceLoader().newInstance(mpClassName, LogMergePolicy.class);
      // ...
      policy = logMergePolicy;
    } else if (TieredMergePolicy.class.isAssignableFrom(mpClass)) {
      TieredMergePolicy tieredMergePolicy = 
schema.getResourceLoader().newInstance(mpClassName, TieredMergePolicy.class);
      // ...
      policy = tieredMergePolicy;
    } else if (SortingMergePolicy.class.isAssignableFrom(mpClass)) {
      // clone initArgs so that we can remove the 'sort' element
      initArgs = mergePolicyInfo.initArgs.clone();
      final Object sortArg = initArgs.remove("sort");
      // now parse the 'sort' element
      final Sort mergeSort = SortSpecParsing.parseSortSpec((String)sortArg, 
schema).getSort();
      // then construct the sorting merge policy
      log.info("Using {}(policy={},mergeSort={})", mpClassName, policy, 
mergeSort);
      SortingMergePolicy sortingMergePolicy = 
schema.getResourceLoader().newInstance(mpClassName, SortingMergePolicy.class,
          null,
          new Class[] { MergePolicy.class, Sort.class },
          new Object[] { policy, mergeSort });
      policy = sortingMergePolicy;
    } else {
      policy = schema.getResourceLoader().newInstance(mpClassName, 
MergePolicy.class);
    }

    SolrPluginUtils.invokeSetters(policy, initArgs);
  }
  return policy;
}
{code}

> make Lucene's SortingMergePolicy and EarlyTerminatingSortingCollector 
> configurable in Solr
> ------------------------------------------------------------------------------------------
>
>                 Key: SOLR-5730
>                 URL: https://issues.apache.org/jira/browse/SOLR-5730
>             Project: Solr
>          Issue Type: New Feature
>            Reporter: Christine Poerschke
>            Assignee: Christine Poerschke
>            Priority: Minor
>         Attachments: SOLR-5730-part1of2.patch, SOLR-5730-part1of2.patch, 
> SOLR-5730-part2of2.patch, SOLR-5730-part2of2.patch
>
>
> *Example configuration (solrconfig.xml):*
> {noformat}
> <sortMerges enable="true">
>   <str name="sort">timestamp desc</str>
> </sortMerges>
> {noformat}
> *Example use (EarlyTerminatingSortingCollector):*
> {noformat}
> &sort=timestamp+desc&segmentTerminateEarly=true
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to