Russell Black created SOLR-9521:
-----------------------------------

             Summary: Warm first searcher with queries from log file
                 Key: SOLR-9521
                 URL: https://issues.apache.org/jira/browse/SOLR-9521
             Project: Solr
          Issue Type: Improvement
      Security Level: Public (Default Security Level. Issues are Public)
          Components: search
    Affects Versions: 6.2
            Reporter: Russell Black
            Priority: Minor


The only way I know of to warm the first searcher before it is opened, is to 
hard code warming queries in

{code:xml}<listener event="newSearcher" class="solr.QuerySenderListener">{code}

For our application, hard-coding is not a good solution since some of our more 
expensive filter queries change periodically.  

I have created a plugin that warms the first searcher from the most recent 
entries in the log files.  In my opinion this capability ought to be part of 
solr, so I'm contributing my code in the hopes that it can be incorporated.

It works by wrapping an instance of QuerySenderListener, setting its "queries" 
argument from recent queries from the log files.  It is configured like this:

{code:xml}
<listener event="firstSearcher" 
class="com.ancestry.eb.josephus.solrplugin.LogFileWarmer">

  <!-- The arguments shown below are the defaults and could be omitted -->

  <!-- A list of filenames to search.  They are searched in the order
       listed, and the lines in each file are searched in reverse
       order, so that the most recent queries are used to warm the
       cache.
  -->
  <str name="file">logs/solr.log</str>
  <str name="file">logs/solr.log.1</str>
  <str name="file">logs/solr.log.2</str>
  <str name="file">logs/solr.log.3</str>
  <str name="file">logs/solr.log.4</str>
  <str name="file">logs/solr.log.5</str>
  <str name="file">logs/solr.log.6</str>
  <str name="file">logs/solr.log.7</str>
  <str name="file">logs/solr.log.8</str>
  <str name="file">logs/solr.log.9</str>
  
  <!-- The maximum number of queries to use from logs -->
  <int name="count">100</int>
  <!-- The maximum number of log lines to search in order to find <count> 
queries-->
  <int name="maxLines">1000000</int>
  <!-- The regular expression that matches the query string from the log line.  
It expects the query string to be in capture group 1. -->
  <str name="regex">path=/select params=\{([^ ]+)\} </str>

  <!-- if no queries can be found in the log files, fall back to this -->
  <arr name="fallback">
    <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
    <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
  </arr>
<listener>
{code}




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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to