SOLR: Что означает autoSoftCommit maxtime of -1?

Здесь параметр по умолчанию из моего файла solrconfig.xml:

 <autoSoftCommit> 
   <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime> 
 </autoSoftCommit>

Значит ли maxTime '-1' означает, что автоматические мягкие коммиты отключены? Если да, получим ли я тот же результат, если бы полностью удалил тег? И если мне нужно вручную выполнить мягкие коммиты, можно ли это сделать с помощью "commitWithin" (я искал это, но получил противоречивые ответы)?

О, и я использую Solr 4.5.0

Ответ 1

Во-первых, вы можете увидеть выражение ${solr.autoSoftCommit.maxTime:-1} в теге. Это позволяет вам использовать замену переменных Solr . Эта функция подробно описана здесь в ссылке. Если эта переменная не была заменена каким-либо из этих средств, -1 принимается за значение для этой конфигурации.

Превращение commitMaxTime в -1 эффективно отключает автозапуск. Если вы посмотрите на соответствующий код ниже, вы увидите, что commitMaxTime перекрывает любое значение maxDocs, так как метод scheduleCommitWithin немедленно возвращается. Я не нашел это поведение документированным, поэтому я искал код.

private void _scheduleCommitWithin(long commitMaxTime) {
    if (commitMaxTime <= 0) return;
    synchronized (this) {
      if (pending != null && pending.getDelay(TimeUnit.MILLISECONDS) <= commitMaxTime) {
        // There is already a pending commit that will happen first, so
        // nothing else to do here.
        // log.info("###returning since getDelay()==" + pending.getDelay(TimeUnit.MILLISECONDS) + " less than " + commitMaxTime);

        return;
      }

      if (pending != null) {
        // we need to schedule a commit to happen sooner than the existing one,
        // so lets try to cancel the existing one first.
        boolean canceled = pending.cancel(false);
        if (!canceled) {
          // It looks like we can't cancel... it must have just started running!
          // this is possible due to thread scheduling delays and a low commitMaxTime.
          // Nothing else to do since we obviously can't schedule our commit *before*
          // the one that just started running (or has just completed).
          // log.info("###returning since cancel failed");
          return;
        }
      }

      // log.info("###scheduling for " + commitMaxTime);

      // schedule our new commit
      pending = scheduler.schedule(this, commitMaxTime, TimeUnit.MILLISECONDS);
    }
}

Взято из https://github.com/apache/lucene-solr/blob/lucene_solr_4_5/solr/core/src/java/org/apache/solr/update/CommitTracker.java

Во вторую часть вашего вопроса, если вы удалите тег вместе, это будет иметь тот же результат, что и значение -1. Как вы можете видеть ниже, если выражение xpath возвращает значение null, вы получите значение -1 в качестве значения по умолчанию.

Но удаление всего выражения из конфигурации также удалит возможность переопределить эту конфигурацию с помощью замены переменных Solr.

protected UpdateHandlerInfo loadUpdatehandlerInfo() {
  return new UpdateHandlerInfo(get("updateHandler/@class",null),
    getInt("updateHandler/autoCommit/maxDocs",-1),
    getInt("updateHandler/autoCommit/maxTime",-1),
    getBool("updateHandler/autoCommit/openSearcher",true),
    getInt("updateHandler/commitIntervalLowerBound",-1),
    getInt("updateHandler/autoSoftCommit/maxDocs",-1),
    getInt("updateHandler/autoSoftCommit/maxTime",-1),
    getBool("updateHandler/commitWithin/softCommit",true));
}

Взято из https://github.com/apache/lucene-solr/blob/lucene_solr_4_5/solr/core/src/java/org/apache/solr/core/SolrConfig.java