You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@solr.apache.org by Russell Bahr <rb...@manzama.com> on 2021/04/19 23:37:32 UTC

Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

We are trying to upgrade our solr clusters and are running into performance issues when moving to the newer version. We are finding that queries are taking more than double the amount of time to return when provided with the same query and both clusters are indexed with the same documents. The queries that we run are using booting as well as groups and ngroups. Our original clusters were solr 4.10.4 and we experienced a similar degradation going from 4.10.4 to 6.5.1 and were able to get around that by splitting the work from one 30 server cluster to two clusters one with 30 servers and a second with 35 clusters. It is not acceptable for us to more than double our clusters again. I have gone through the documentation and made changes to the schema and solr config as needed to upgrade but am still not sure why we are experiencing such a dramatic degradation in performance.

We are indexing about 550000 new documents daily and updating around 550000 documents daily as well.

The clusters are configured as follows with schema and configs and a sample query that I am running against both cluster examples.

Old cluster:
Solr 6.5.1
31 GB heap
OpenJDK 64-Bit Server VM - 1.8.0_275-8u275-b01-1~deb9u1-b01
Shards -6 Replicas -5
18643418 docs
Avg size/doc: 2.6Kb
http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":2665,
    "params":{
      "q":"*:*",
      "indent":"on",
      "wt":"json",
      "_":"1618866411985"}},
  "grouped":{
    "fingerprint":{
      "matches":18728759,
      "ngroups":14295515,
      "groups":[{

…


New cluster: - this query takes about 10 times as long.
Solr 8.7.0
31 GB heap
OpenJDK 64-Bit Server VM - 11.0.9.1+1-post-Debian-1deb10u2
Shards -5 Replicas -5
18643418 docs
Avg size/doc: 2.6Kb
http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":27876,
    "params":{
      "q":"*:*",
      "wt":"json",
      "_":"1618866396857"}},
  "grouped":{
    "fingerprint":{
      "matches":18730577,
      "ngroups":13988977,

…


Solr 6.5.1

solr 6.5.1 schema.xml

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="articles" version="1.5">
    <uniqueKey>id</uniqueKey>
    <defaultSearchField>text</defaultSearchField>
    <solrQueryParser defaultOperator="AND" />

    <fieldType name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>

    <!-- lowercases the entire field value, keeping it as a single token.  -->
    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
   </fieldType>

    <!-- Exact text, without word stemming -->
    <fieldType name="exact_text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    <!-- Exact text, case-sensitive, without word stemming -->
    <fieldType name="exact_text_and_case" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
        </analyzer>
    </fieldType>

    <!-- Exact text (without word stemming) but normalized. Used for the headline field -->
    <fieldType name="exact_text_normalized" class="solr.TextField" positionIncrementGap="100" omitNorms="false">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    <!-- The default (stemmed) text field for general queries -->
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" />
        </analyzer>
    </fieldType>

    <!-- General -->
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true" docValues="true"/>
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="lang" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />

    <!-- Content -->
    <field name="headline" type="exact_text_normalized" indexed="true" stored="true" multiValued="false" />
    <!-- <field name="intro" type="text" indexed="true" stored="false" multiValued="false" /> -->
    <field name="intro" type="exact_text_normalized" indexed="true" stored="false" multiValued="false" />
    <field name="text" type="text" indexed="true" stored="false" multiValued="false" />
    <field name="content" type="text" indexed="false" stored="true" multiValued="false" />
    <field name="content_fulltext" type="text" stored="false" indexed="true" multiValued="false" />
    <field name="content_exact" type="exact_text" stored="false" indexed="true" multiValued="false" />               <!-- generated from `text` -->
    <field name="content_exact_case" type="exact_text_and_case" stored="false" indexed="true" multiValued="false" /> <!-- generated from `text` -->


    <!-- Source Data -->
    <field name="published_at" type="date" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="publication_type" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="feed_id" type="long" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="subscription" type="int" indexed="true" stored="false" docValues="true" />
    <field name="priority_fetch" type="boolean" indexed="true" stored="true" />

    <!-- Ranking -->
    <field name="priority" type="float" indexed="true" stored="false" multiValued="false" docValues="true" />
    <field name="site_rank" type="long" indexed="true" stored="false" multiValued="false" docValues="true" />
    <field name="combined_priority_weight" type="float" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="valid_firms" type="long" indexed="true" stored="false" multiValued="true" docValues="true" />

    <!-- Pre-Tagging of Saved Searches -->
    <field name="ss" type="long" indexed="true" stored="false" multiValued="true" docValues="true" />
    <field name="tags" type="string" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="last_taggable_change" type="date" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="tagged_topics" type="long" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="tagged_about_sources" type="long" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="tagged_created_sources" type="long" indexed="true" stored="true" multiValued="true" docValues="true" />

    <!-- Event Specific -->
    <field name="end_date" type="date" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="start_date" type="date" indexed="true" stored="true" multiValued="false" docValues="true" />

    <!-- Twitter specific -->
    <field name="tweeter" type="lowercase" indexed="true" stored="true" multiValued="false" />

    <!-- Functional -->
    <field name="fingerprint" type="string" stored="false" indexed="true" multiValued="false" docValues="true" />
    <field name="_version_" type="long" indexed="true" stored="true" docValues="true" />

    <!-- Copy text into content_exact -->
    <copyField source="text" dest="content_exact" />
    <copyField source="text" dest="content_exact_case" />

    <!-- Insights -->
    <field name="has_signal" type="int" indexed="true" stored="true" multiValued="false"
           docValues="true" />

    <!-- Industry Entities -->
    <field name="industry_tags" type="long" indexed="true" stored="true" multiValued="true" docValues="true" />

</schema>

solr 6.5.1 solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<config>

  <luceneMatchVersion>6.5.1</luceneMatchVersion>

  <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
  <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />

  <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
  <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />

  <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
  <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />

  <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
  <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />

  <lib dir="/total/crap/dir/ignored" />

  <dataDir>${solr.data.dir:}</dataDir>

  <schemaFactory class="ClassicIndexSchemaFactory"/>

  <directoryFactory name="DirectoryFactory"
                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>

  <indexConfig>

</indexConfig>

  <jmx />

  <updateHandler class="solr.DirectUpdateHandler2">

     <autoCommit>
       <maxTime>600000</maxTime>
       <openSearcher>false</openSearcher>
     </autoCommit>

      <autoSoftCommit>
        <maxTime>120000</maxTime>
      </autoSoftCommit>


    <updateLog>
      <str name="dir">${solr.data.dir:}</str>
    </updateLog>

  </updateHandler>

  <query>

   <maxBooleanClauses>4096</maxBooleanClauses>

   <filterCache class="solr.LRUCache"
                 size="3600"
                 initialSize="128"
                 autowarmCount="128"/>

    <queryResultCache class="solr.LRUCache"
                     size="1024"
                     initialSize="64"
                     autowarmCount="64"/>

    <documentCache class="solr.LRUCache"
                   size="4096"
                   initialSize="128"
                   autowarmCount="0"/>

    <enableLazyFieldLoading>true</enableLazyFieldLoading>

  <queryResultWindowSize>20</queryResultWindowSize>

  <queryResultMaxDocsCached>200</queryResultMaxDocsCached>

    <listener event="newSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
      </arr>
    </listener>
    <listener event="firstSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
        <lst>
          <str name="q">static firstSearcher warming in solrconfig.xml</str>
        </lst>
      </arr>
    </listener>

   <useColdSearcher>true</useColdSearcher>

    <maxWarmingSearchers>4</maxWarmingSearchers>

  </query>

  <requestDispatcher handleSelect="false" >

   <requestParsers enableRemoteStreaming="false"
                    multipartUploadLimitInKB="2048000" />

    <httpCaching never304="true" />

  </requestDispatcher>

  <requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="df">text</str>
       <str name="group">true</str>
       <str name="group.field">fingerprint</str>
       <int name="group.limit">6</int>
       <str name="group.ngroups">true</str>
       <int name="f.feed_id.facet.mincount">1</int>
       <int name="f.linked_searches.facet.mincount">1</int>
       <int name="timeAllowed">120000</int>
     </lst>

    </requestHandler>

  <requestHandler name="/get" class="solr.RealTimeGetHandler">
     <lst name="defaults">
       <str name="omitHeader">true</str>
       <str name="wt">json</str>
       <str name="indent">true</str>
     </lst>
  </requestHandler>

  <requestHandler name="/export" class="solr.SearchHandler">
    <lst name="invariants">
      <str name="rq">{!xport}</str>
      <str name="wt">xsort</str>
      <str name="distrib">false</str>
    </lst>

    <arr name="components">
      <str>query</str>
    </arr>
  </requestHandler>

  <requestHandler name="/update" class="solr.UpdateRequestHandler">
  </requestHandler>

  <requestHandler name="/update/extract"
                  startup="lazy"
                  class="solr.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
      <str name="lowernames">true</str>
      <str name="uprefix">ignored_</str>

      <!-- capture link hrefs but ignore div attributes -->
      <str name="captureAttr">true</str>
      <str name="fmap.a">links</str>
      <str name="fmap.div">ignored_</str>
    </lst>
  </requestHandler>

  <requestHandler name="/analysis/field"
                  startup="lazy"
                  class="solr.FieldAnalysisRequestHandler" />

  <requestHandler name="/analysis/document"
                  class="solr.DocumentAnalysisRequestHandler"
                  startup="lazy" />

  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
    <lst name="invariants">
      <str name="q">solrpingquery</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>

  <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
    <lst name="defaults">
     <str name="echoParams">explicit</str>
     <str name="echoHandler">true</str>
    </lst>
  </requestHandler>

   <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />

  <searchComponent name="spellcheck" class="solr.SpellCheckComponent">

    <str name="queryAnalyzerFieldType">textSpell</str>

    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">name</str>
      <str name="classname">solr.DirectSolrSpellChecker</str>
      <str name="distanceMeasure">internal</str>
      <float name="accuracy">0.5</float>
      <int name="maxEdits">2</int>
      <int name="minPrefix">1</int>
      <int name="maxInspections">5</int>
      <int name="minQueryLength">4</int>
      <float name="maxQueryFrequency">0.01</float>
    </lst>

    <lst name="spellchecker">
      <str name="name">wordbreak</str>
      <str name="classname">solr.WordBreakSolrSpellChecker</str>
      <str name="field">name</str>
      <str name="combineWords">true</str>
      <str name="breakWords">true</str>
      <int name="maxChanges">10</int>
    </lst>

  </searchComponent>

  <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>

  <searchComponent name="clustering"
                   enable="${solr.clustering.enabled:false}"
                   class="solr.clustering.ClusteringComponent" >
    <lst name="engine">
      <str name="name">default</str>
      <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
      <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
      <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
      <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
    </lst>
    <lst name="engine">
      <str name="name">stc</str>
      <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
    </lst>
  </searchComponent>

  <requestHandler name="/clustering"
                  startup="lazy"
                  enable="${solr.clustering.enabled:false}"
                  class="solr.SearchHandler">
    <lst name="defaults">
      <bool name="clustering">true</bool>
      <str name="clustering.engine">default</str>
      <bool name="clustering.results">true</bool>
      <str name="carrot.title">name</str>
      <str name="carrot.url">id</str>
      <str name="carrot.snippet">features</str>
       <bool name="carrot.produceSummary">true</bool>
       <bool name="carrot.outputSubClusters">false</bool>

       <str name="defType">edismax</str>
       <str name="qf">
         text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
       </str>
       <str name="q.alt">*:*</str>
       <str name="rows">10</str>
       <str name="fl">*,score</str>
    </lst>
    <arr name="last-components">
      <str>clustering</str>
    </arr>
  </requestHandler>

  <searchComponent name="terms" class="solr.TermsComponent"/>

  <searchComponent name="elevator" class="solr.QueryElevationComponent" >
    <str name="queryFieldType">string</str>
    <str name="config-file">elevate.xml</str>
  </searchComponent>

  <searchComponent class="solr.HighlightComponent" name="highlight">
    <highlighting>
      <fragmenter name="gap"
                  default="true"
                  class="solr.highlight.GapFragmenter">
        <lst name="defaults">
          <int name="hl.fragsize">100</int>
        </lst>
      </fragmenter>
      <fragmenter name="regex"
                  class="solr.highlight.RegexFragmenter">
        <lst name="defaults">
          <int name="hl.fragsize">70</int>
          <float name="hl.regex.slop">0.5</float>
          <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
        </lst>
      </fragmenter>

      <formatter name="html"
                 default="true"
                 class="solr.highlight.HtmlFormatter">
        <lst name="defaults">
          <str name="hl.simple.pre"><![CDATA[<em>]]></str>
          <str name="hl.simple.post"><![CDATA[</em>]]></str>
        </lst>
      </formatter>

      <encoder name="html"
               class="solr.highlight.HtmlEncoder" />

     <fragListBuilder name="simple"
                       class="solr.highlight.SimpleFragListBuilder"/>

      <fragListBuilder name="single"
                       class="solr.highlight.SingleFragListBuilder"/>

      <fragListBuilder name="weighted"
                       default="true"
                       class="solr.highlight.WeightedFragListBuilder"/>

      <fragmentsBuilder name="default"
                        default="true"
                        class="solr.highlight.ScoreOrderFragmentsBuilder">
      </fragmentsBuilder>

      <fragmentsBuilder name="colored"
                        class="solr.highlight.ScoreOrderFragmentsBuilder">
        <lst name="defaults">
          <str name="hl.tag.pre"><![CDATA[
               <b style="background:yellow">,<b style="background:lawgreen">,
               <b style="background:aquamarine">,<b style="background:magenta">,
               <b style="background:palegreen">,<b style="background:coral">,
               <b style="background:wheat">,<b style="background:khaki">,
               <b style="background:lime">,<b style="background:deepskyblue">]]></str>
          <str name="hl.tag.post"><![CDATA[</b>]]></str>
        </lst>
      </fragmentsBuilder>

      <boundaryScanner name="default"
                       default="true"
                       class="solr.highlight.SimpleBoundaryScanner">
        <lst name="defaults">
          <str name="hl.bs.maxScan">10</str>
          <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
        </lst>
      </boundaryScanner>

      <boundaryScanner name="breakIterator"
                       class="solr.highlight.BreakIteratorBoundaryScanner">
        <lst name="defaults">
          <str name="hl.bs.type">WORD</str>
          <str name="hl.bs.language">en</str>
          <str name="hl.bs.country">US</str>
        </lst>
      </boundaryScanner>
    </highlighting>
  </searchComponent>

  <queryResponseWriter name="json" class="solr.JSONResponseWriter">
    <str name="content-type">text/plain; charset=UTF-8</str>
  </queryResponseWriter>

    <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"/>

  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
    <int name="xsltCacheLifetimeSeconds">5</int>
  </queryResponseWriter>

  <!-- Legacy config for the admin interface -->
  <admin>
    <defaultQuery>*:*</defaultQuery>
  </admin>

</config>

Solr 8.7.0

solr 8.7.0 schema.xml


<?xml version="1.0" encoding="UTF-8" ?>
<schema name="articles" version="1.6">
    <uniqueKey>id</uniqueKey>
    <!--Define default scorer -->
    <similarity class="solr.LegacyBM25SimilarityFactory"/>

    <!--Depricated in solr 8 -->
    <!--<defaultSearchField>text</defaultSearchField> -->
    <!--<solrQueryParser defaultOperator="AND" /> -->

    <!--Define fieldTypes Trie* has been replaced by *PointField-->
    <fieldType name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
    <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
    <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
    <fieldType name="pdouble" class="solr.DoublePointField" docValues="true" />
    <fieldType name="pdate" class="solr.DatePointField" omitNorms="true" docValues="true"/>

    <!-- lowercases the entire field value, keeping it as a single token.  -->
    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
    </fieldType>

    <!-- Exact text, without word stemming -->
    <fieldType name="exact_text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    <!-- Exact text, case-sensitive, without word stemming -->
    <fieldType name="exact_text_and_case" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
        </analyzer>
    </fieldType>

    <!-- Exact text (without word stemming) but normalized. Used for the headline field -->
    <fieldType name="exact_text_normalized" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                    catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                    preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    <!-- The default (stemmed) text field for general queries -->
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
       <filter class="solr.FlattenGraphFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
                catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
                preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" />
        </analyzer>
    </fieldType>

    <!-- General -->
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true" docValues="true"/>
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="lang" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />

    <!-- Content -->
    <field name="headline" type="exact_text_normalized" indexed="true" stored="true" multiValued="false" />
    <!-- <field name="intro" type="text" indexed="true" stored="false" multiValued="false" /> -->
    <field name="intro" type="exact_text_normalized" indexed="true" stored="false" multiValued="false" />
    <field name="text" type="text" indexed="true" stored="false" multiValued="false" />
    <field name="content" type="text" indexed="false" stored="true" multiValued="false" />
    <field name="content_fulltext" type="text" stored="false" indexed="true" multiValued="false" />
    <field name="content_exact" type="exact_text" stored="false" indexed="true" multiValued="false" />               <!-- generated from `text` -->
    <field name="content_exact_case" type="exact_text_and_case" stored="false" indexed="true" multiValued="false" /> <!-- generated from `text` -->


    <!-- Source Data -->
    <field name="published_at" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="publication_type" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="feed_id" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="subscription" type="pint" indexed="true" stored="false" docValues="true" />
    <field name="priority_fetch" type="boolean" indexed="true" stored="true" />

    <!-- Ranking -->
    <field name="priority" type="pfloat" indexed="true" stored="false" multiValued="false" docValues="true" />
    <field name="site_rank" type="plong" indexed="true" stored="false" multiValued="false" docValues="true" />
    <field name="combined_priority_weight" type="pfloat" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="valid_firms" type="plong" indexed="true" stored="false" multiValued="true" docValues="true" />

    <!-- Pre-Tagging of Saved Searches -->
    <field name="ss" type="plong" indexed="true" stored="false" multiValued="true" docValues="true" />
    <field name="tags" type="string" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="last_taggable_change" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="tagged_topics" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="tagged_about_sources" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
    <field name="tagged_created_sources" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />

    <!-- Event Specific -->
    <field name="end_date" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
    <field name="start_date" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />

    <!-- Twitter specific -->
    <field name="tweeter" type="lowercase" indexed="true" stored="true" multiValued="false" />

    <!-- Functional -->
    <field name="fingerprint" type="string" stored="false" indexed="true" multiValued="false" docValues="true" />
    <field name="_version_" type="plong" indexed="true" stored="true" docValues="true" />

    <!-- Copy text into content_exact -->
    <copyField source="text" dest="content_exact" />
    <copyField source="text" dest="content_exact_case" />

    <!-- Insights -->
    <field name="has_signal" type="pint" indexed="true" stored="true" multiValued="false"
           docValues="true" />

    <!-- Industry Entities -->
    <field name="industry_tags" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />

</schema>

solr 8.7.0 solrconfig.xml


<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <luceneMatchVersion>8.7.0</luceneMatchVersion>
  <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
  <dataDir>${solr.data.dir:}</dataDir>
  <directoryFactory name="DirectoryFactory"
                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>

      <schemaFactory class="ClassicIndexSchemaFactory">
        </schemaFactory>
  <codecFactory class="solr.SchemaCodecFactory"/>


  <indexConfig>

        <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
          <int name="maxMergeAtOnce">10</int>
          <int name="segmentsPerTier">2</int>
          <double name="noCFSRatio">0.1</double>
        </mergePolicyFactory>

    <lockType>${solr.lock.type:native}</lockType>

  </indexConfig>


  <jmx />


  <updateHandler class="solr.DirectUpdateHandler2">


    <updateLog>
      <str name="dir">${solr.ulog.dir:}</str>
      <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
    </updateLog>

     <autoCommit>
       <maxTime>600000</maxTime>
       <maxDocs>1000000</maxDocs>
       <openSearcher>false</openSearcher>
     </autoCommit>


      <autoSoftCommit>
        <maxTime>120000</maxTime>
      </autoSoftCommit>

  </updateHandler>


  <query>


    <maxBooleanClauses>4096</maxBooleanClauses>

    <slowQueryThresholdMillis>100000</slowQueryThresholdMillis>


    <filterCache class="solr.CaffeineCache"
                 size="3600"
                 initialSize="2048"
                 autowarmCount="2048"/>


    <queryResultCache class="solr.CaffeineCache"
                     size="1024"
                     initialSize="512"
                     autowarmCount="512"/>

    <documentCache class="solr.CaffeineCache"
                   size="4096"
                   initialSize="1024"
                   autowarmCount="1024"/>

    <cache name="perSegFilter"
           class="solr.CaffeineCache"
           size="10"
           initialSize="0"
           autowarmCount="10"
           regenerator="solr.NoOpRegenerator" />

    <enableLazyFieldLoading>true</enableLazyFieldLoading>

   <queryResultWindowSize>20</queryResultWindowSize>

   <queryResultMaxDocsCached>200</queryResultMaxDocsCached>

    <listener event="newSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
      </arr>
    </listener>
    <listener event="firstSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
        <lst>
          <str name="q">static firstSearcher warming in solrconfig.xml</str>
        </lst>
      </arr>
    </listener>

    <useColdSearcher>true</useColdSearcher>

    <maxWarmingSearchers>4</maxWarmingSearchers>

  </query>

  <requestDispatcher>


    <requestParsers enableRemoteStreaming="false"
                    multipartUploadLimitInKB="2048000" />


    <httpCaching never304="true" />


  </requestDispatcher>

  <requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="df">text</str>
       <str name="q.op">AND</str>
       <str name="group">true</str>
       <str name="group.field">fingerprint</str>
       <int name="group.limit">6</int>
       <str name="group.ngroups">true</str>
       <int name="f.feed_id.facet.mincount">1</int>
       <int name="f.linked_searches.facet.mincount">1</int>
       <int name="timeAllowed">120000</int>
     </lst>


    </requestHandler>

  <requestHandler name="/get" class="solr.RealTimeGetHandler">
     <lst name="defaults">
       <str name="omitHeader">true</str>
       <str name="wt">json</str>
       <str name="indent">true</str>
     </lst>
  </requestHandler>


  <requestHandler name="/export" class="solr.SearchHandler">
    <lst name="invariants">
      <str name="rq">{!xport}</str>
      <str name="wt">xsort</str>
      <str name="distrib">false</str>
    </lst>

    <arr name="components">
      <str>query</str>
    </arr>
  </requestHandler>

  <requestHandler name="/update" class="solr.UpdateRequestHandler">
  </requestHandler>

  <requestHandler name="/update/extract"
                  startup="lazy"
                  class="solr.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
      <str name="lowernames">true</str>
      <str name="uprefix">ignored_</str>
      <str name="captureAttr">true</str>
      <str name="fmap.a">links</str>
      <str name="fmap.div">ignored_</str>
    </lst>
  </requestHandler>

  <requestHandler name="/analysis/field"
                  startup="lazy"
                  class="solr.FieldAnalysisRequestHandler" />

  <requestHandler name="/analysis/document"
                  class="solr.DocumentAnalysisRequestHandler"
                  startup="lazy" />


  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
    <lst name="invariants">
      <str name="q">solrpingquery</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>

  <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
    <lst name="defaults">
     <str name="echoParams">explicit</str>
     <str name="echoHandler">true</str>
    </lst>
  </requestHandler>

   <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />

  <searchComponent name="spellcheck" class="solr.SpellCheckComponent">

    <str name="queryAnalyzerFieldType">textSpell</str>

    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">name</str>
      <str name="classname">solr.DirectSolrSpellChecker</str>
      <str name="distanceMeasure">internal</str>
      <float name="accuracy">0.5</float>
      <int name="maxEdits">2</int>
      <int name="minPrefix">1</int>
      <int name="maxInspections">5</int>
      <int name="minQueryLength">4</int>
      <float name="maxQueryFrequency">0.01</float>
    </lst>

    <lst name="spellchecker">
      <str name="name">wordbreak</str>
      <str name="classname">solr.WordBreakSolrSpellChecker</str>
      <str name="field">name</str>
      <str name="combineWords">true</str>
      <str name="breakWords">true</str>
      <int name="maxChanges">10</int>
    </lst>

  </searchComponent>

  <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>

  <searchComponent name="clustering"
                   enable="${solr.clustering.enabled:false}"
                   class="solr.clustering.ClusteringComponent" >
    <lst name="engine">
      <str name="name">default</str>
      <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
      <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
      <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
      <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
    </lst>
    <lst name="engine">
      <str name="name">stc</str>
      <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
    </lst>
  </searchComponent>

  <requestHandler name="/clustering"
                  startup="lazy"
                  enable="${solr.clustering.enabled:false}"
                  class="solr.SearchHandler">
    <lst name="defaults">
      <bool name="clustering">true</bool>
      <str name="clustering.engine">default</str>
      <bool name="clustering.results">true</bool>
      <str name="carrot.title">name</str>
      <str name="carrot.url">id</str>
       <str name="carrot.snippet">features</str>
       <bool name="carrot.produceSummary">true</bool>
       <bool name="carrot.outputSubClusters">false</bool>

       <str name="defType">edismax</str>
       <str name="qf">
         text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
       </str>
       <str name="q.alt">*:*</str>
       <str name="rows">10</str>
       <str name="fl">*,score</str>
    </lst>
    <arr name="last-components">
      <str>clustering</str>
    </arr>
  </requestHandler>


  <searchComponent name="terms" class="solr.TermsComponent"/>


  <searchComponent name="elevator" class="solr.QueryElevationComponent" >
    <str name="queryFieldType">string</str>
    <str name="config-file">elevate.xml</str>
  </searchComponent>
  <searchComponent class="solr.HighlightComponent" name="highlight">
    <highlighting>
      <fragmenter name="gap"
                  default="true"
                  class="solr.highlight.GapFragmenter">
        <lst name="defaults">
          <int name="hl.fragsize">100</int>
        </lst>
      </fragmenter>

      <fragmenter name="regex"
                  class="solr.highlight.RegexFragmenter">
        <lst name="defaults">
          <int name="hl.fragsize">70</int>
          <float name="hl.regex.slop">0.5</float>
          <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
        </lst>
      </fragmenter>

      <formatter name="html"
                 default="true"
                 class="solr.highlight.HtmlFormatter">
        <lst name="defaults">
          <str name="hl.simple.pre"><![CDATA[<em>]]></str>
          <str name="hl.simple.post"><![CDATA[</em>]]></str>
        </lst>
      </formatter>

      <encoder name="html"
               class="solr.highlight.HtmlEncoder" />

      <fragListBuilder name="simple"
                       class="solr.highlight.SimpleFragListBuilder"/>

      <fragListBuilder name="single"
                       class="solr.highlight.SingleFragListBuilder"/>

      <fragListBuilder name="weighted"
                       default="true"
                       class="solr.highlight.WeightedFragListBuilder"/>
      <fragmentsBuilder name="default"
                        default="true"
                        class="solr.highlight.ScoreOrderFragmentsBuilder">
      </fragmentsBuilder>

      <fragmentsBuilder name="colored"
                        class="solr.highlight.ScoreOrderFragmentsBuilder">
        <lst name="defaults">
          <str name="hl.tag.pre"><![CDATA[
               <b style="background:yellow">,<b style="background:lawgreen">,
               <b style="background:aquamarine">,<b style="background:magenta">,
               <b style="background:palegreen">,<b style="background:coral">,
               <b style="background:wheat">,<b style="background:khaki">,
               <b style="background:lime">,<b style="background:deepskyblue">]]></str>
          <str name="hl.tag.post"><![CDATA[</b>]]></str>
        </lst>
      </fragmentsBuilder>

      <boundaryScanner name="default"
                       default="true"
                       class="solr.highlight.SimpleBoundaryScanner">
        <lst name="defaults">
          <str name="hl.bs.maxScan">10</str>
          <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
        </lst>
      </boundaryScanner>

      <boundaryScanner name="breakIterator"
                       class="solr.highlight.BreakIteratorBoundaryScanner">
        <lst name="defaults">
          <str name="hl.bs.type">WORD</str>
          <str name="hl.bs.language">en</str>
          <str name="hl.bs.country">US</str>
        </lst>
      </boundaryScanner>
    </highlighting>
  </searchComponent>

  <queryResponseWriter name="json" class="solr.JSONResponseWriter">
    <str name="content-type">text/plain; charset=UTF-8</str>
  </queryResponseWriter>


    <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"/>


  <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
    <int name="xsltCacheLifetimeSeconds">5</int>
  </queryResponseWriter>

  <admin>
    <defaultQuery>*:*</defaultQuery>
  </admin>

</config>

Solr Query examples.

*:*



{!boost b=sum(product(99999999999,has_signal),product(pow(priority,10),pow(recip(abs(ms(NOW/HOUR,published_at)),2.77e-09,1,1),5)))}((tags:Real_Est OR (((headline:"real estate"^99999999999 OR headline:"commercial development"^99999999999 OR headline:"commercial developer"^99999999999 OR "Real Estate" OR "Real Property" OR "property law" OR "Property Deal" OR "Property Sale" OR "purchase of land" OR "Homeowners Association" OR content_exact:"HOA" OR "Board of Realtors" OR content_exact:"Property Development" OR "CAP Rate" OR content_exact:"Housing Demand" OR "CRE Finance Council" OR "Housing Supply" OR "Property Tax" OR content_exact:"FHA" OR content_exact:"Fully Leased" OR content_exact:"Represented the Buyer" OR content_exact:"Design/Build" OR "Ad Valorem" OR "Anchor Tenant" OR "Build to suit" OR "Certificate of Occupancy" OR "Eminent Domain" OR "new office building" OR "new office development" OR "Adverse possession" OR "Allodial title" OR "planning law" OR "planning permission" OR "housebuilder" OR "housebiilding" OR content_exact:"housebuilder" OR "Fee Simple" OR "Fee tail" OR "Quiet Title" OR "Restraint on alienation" OR "Rule in Shelley" OR "Doctrine of worthier title" OR "Worthier Title Doctrine" OR content_exact:"Easement" OR "Equitable servitude")) OR ((tagged_topics:(27) OR tagged_about_sources:(27) OR tagged_created_sources:(27)) OR (tagged_topics:(107263) OR tagged_about_sources:(107263) OR tagged_created_sources:(107263)) OR (((content_exact:"Office Building" OR "Office Complex" OR "Office Tower" OR "Office Space" OR "Office Center" OR "Office Campus" OR "Class A Office" OR "Class B Office" OR "Class C Office" OR content_exact:"Class A Building" OR content_exact:"Class B Building" OR content_exact:"Class C Building" OR content_exact:"Class A Tower" OR content_exact:"Class B Tower" OR content_exact:"Class C Tower" OR content_exact:"corporate office" OR "office property" OR "office properties"))) OR (tagged_topics:(119) OR tagged_about_sources:(119) OR tagged_created_sources:(119)))) AND NOT ("intellectual property" OR "plan testimonial")) AND ((((tags:"geo_morocco"^0.9 OR *:*) OR (content_exact:"March Madness"^0.19999 OR headline:"recognizes"^0.19999 OR headline:("holiday sale" OR "tech deals" OR "Black Friday Sale" OR "Black Friday deals"~5 OR "Market Analysis" OR wildfire OR arrested OR stabbed OR "celebrate birthday"~5 OR "market expected boom"~5 OR "what to expect" OR "where to find")^0.199999999999 OR content_exact:"state championship game"^0.19999 OR content_exact:"playstation 4"^0.1999999999999 OR content_exact:"recover after shock"^0.19999 OR content_exact:"losing streak"^0.19999 OR content_exact:"with win over"^0.19999 OR headline:(content_exact:"Islamic state")^0.19999 OR headline:("accident")^0.1999999999 OR headline:(content_exact:"badgers")^0.19999 headline:("part time" OR "full time" OR "accuweather" OR "snowstorm" OR PHOTOS)^0.199999999999 OR headline:(content_exact:"investor alert")^0.19999999999999 OR headline:(content_exact:"stock")^0.19999999 OR headline:(content_exact:"cuts holdings" OR content_exact:"raises holdings" OR content_exact:"reduces holdings")^0.19999999 OR headline:("ResearchAndMarkets.com")^0.19999 OR headline:(content_exact:"conference")^0.19999 OR headline:(content_exact:"of the year")^0.19999 OR headline:(content_exact:"rankings")^0.19999 OR ("edged higher")^0.1999999999999999 OR ("edged lower")^0.1999999999999999 OR headline:(content_exact:"blue devils")^0.19999 OR headline:(content_exact:"shares climb")^0.19999 OR headline:(content_exact:"volunteer")^0.19999999 OR headline:(content_exact:"murderer")^0.19999 OR headline:(content_exact:"murdered")^0.19999 OR headline:(content_exact:"hurricane")^0.19999 OR headline:(content_exact:"tornado")^0.19999 OR headline:(content_exact:"storm")^0.19999 OR headline:(content_exact:"found dead")^0.19999 OR headline:(content_exact:"celebrity")^0.19999999 OR headline:(content_exact:"registration underway")^0.19 OR headline:(content_exact:"boko haram")^0.19999999 OR headline:(content_exact:"police arrest")^0.19999 OR "human remains"^0.1999 OR "slaying"^0.1999 OR "home prices"^0.1999 OR "transfer news"^0.1999 OR headline:("militia")^0.19999999 OR (content_exact:"shooting")^0.19999 OR headline:("ISIS")^0.19999999 OR headline:(content_exact:"prostitution")^0.19999999 OR headline:(content_exact:"drugs")^0.19999 OR content_exact:"winger"^0.19999999 OR "happy birthday"^0.19999 OR "happy easter"^0.19999 OR "merry christmas"^0.19999 OR "reported at trading volume"^0.199999 OR "most active stocks"^0.199999 OR "loss narrows"^0.199999 OR "earnings conference"^0.199999 OR "put options"^0.199999 OR "trading range"^0.199999 OR "week low"^0.199999 OR "week high"^0.199999 OR "neutral"^0.199999 OR "downgraded"^0.199999 OR "upgraded"^0.199999 OR "average rating"^0.199999 OR "financial report"^0.19999999 OR "quarterly"^0.199999 OR "q1 loss"^0.19 OR "q3 loss"^0.19999999 OR "q4 loss"^0.19999999 OR "q2 loss"^0.19999999 OR "financial results"^0.1999999 OR "upgrades"^0.19999999 OR "upgraded"^0.19999 OR "downgrades"^0.19999 OR "downgraded"^0.19999 OR "consensus estimate"^0.19999 OR "analyst estimate"^0.19999 OR "consensus analyst estimate"^0.199999 OR "q1 results"^0.19999 OR "q2 results"^0.19999 OR "q3 results"^0.19999999 OR "q4 results"^0.19999 OR content_exact:"EPS"^0.19999999 OR "fiscal results"^0.19999 OR "financial results"^0.1999 OR "profits up"^0.19999999 OR "profit down"^0.19999 OR "quarter report"^0.19999 OR "quarterly report"^0.19 OR "earnings"^0.19999 OR "quarterly results"^0.19999999 OR "earnings report"^0.19999999 OR "quarterly earnings"^0.19999 OR content_exact:"narrows"^0.19999 OR content_exact:"quarter loss"^0.19999999 OR content_exact:"quarterly losses"^0.19999 OR content_exact:"quarterly loss"^0.19999 OR content_exact:"quarter results"^0.19999999 OR content_exact:"report of earnings"^0.19999999 OR "earnings release"^0.19999999 OR "research reports"^0.19999999 OR "target raised"^0.19999999 OR "try any of our foolish"^0.19999999 OR "jim cramer"^0.19999999 OR content_exact:"jumps"^0.19 OR headline:(content_exact:"coverage")^0.1999999 OR headline:("rose stock"~5)^0.1999999999 OR headline:("declined stock"~5)^0.1999999999 OR headline:("FOREX")^0.199999999 OR content_exact:"unloads"^0.19999999 OR "shares drops"^0.19999999 OR "research and markets"^0.19999999 OR headline:("price target")^0.1999999999 OR headline:("early movers")^0.1999999999 OR headline:("rating")^0.1999999999 OR headline:("stock")^0.1999999999 OR headline:("stocks")^0.199999999 OR "U.S. stocks were lower"^0.1999999 OR headline:("slides")^0.199999999 OR headline:("wall st")^0.199999999 OR headline:("indexes")^0.199999999 OR headline:("financial results")^0.1999999999999999 OR headline:("closing bell")^0.19 OR headline:(content_exact:"higher volume")^0.1999 OR headline:("trading lower")^0.1999 OR headline:(content_exact:"research and markets")^0.1999999 OR (content_exact:"mid-day changers")^0.1999999 OR (headline:"a share")^0.1999999 OR (headline:"insider buying")^0.1999999 OR (headline:"short interest")^0.1999999 OR (headline:"shares of")^0.1999999 OR (headline:"market movers")^0.1999999 OR (headline:"analyst")^0.19999999999 OR (headline:"analysts")^0.19999999999 OR (headline:"dow spikes")^0.19999999999 OR (headline:"dow movers")^0.1999999 OR (headline:"bidness")^0.1999999)) AND NOT ((headline:("market report" OR "market by offering" OR "market segmentation"~6 OR "applications forecast" OR "market tremendous growth"~8 OR "market significant growth"~8 OR "market status" OR "forecast 2019"~4 OR "forecast 2020"~4 OR "forecast 2021"~4 OR "forecast 2022"~4 OR "forecast 2023"~4 OR "forecast 2024"~4 OR "forecast 2025"~4 OR "forecast 2026"~4 OR "forecast 2027"~4 OR "valuation reach"~4 OR "market grow during"~5 OR "market survey report"~5 OR "holding cut by") OR headline:("investing advise" OR "market to witness" OR "position decreased by" OR "increases stake" OR "market study" OR "market size" OR "global forecast" OR "stock analysts" OR "sentiment shift") OR headline:("global industry") OR headline:("dow gains") OR headline:("forecast industry"~5 OR "worldwide forecast"~7 OR "market analysis"~5) OR headline:("researchandmarkets.com") OR headline:("morning movers") OR headline:("markets now") OR headline:("market trends"~5) OR headline:("market estimated valued"~9) OR headline:("market projected to grow") OR headline:("market expected to grow"~6) OR headline:("falls to low"~6) OR headline:("Zacks investment research") OR headline:("SWOT analysis") OR "equal weight" OR headline:("brokerage recommendations") OR headline:("ratings outlook") OR headline:("financial stocks") OR headline:("equities research") OR headline:("given average recommendation") OR headline:("from analysts") OR headline:("target price") OR "Barclays target price"~15 OR headline:("Consensus Recommendation") OR headline:("Coverage initiated") OR headline:("Wall street opens lower") OR headline:("Wall street pulls back") OR headline:("Wall street advances") OR headline:("Wall street opens higher") OR headline:("REPORTS ACQUISITION BY DIRECTOR") OR headline:("REPORTS ACQUISITION BY Senior") OR headline:("REPORTS ACQUISITION BY VP") OR headline:("REPORTS ACQUISITION BY executive") OR headline:("REPORTS ACQUISITION BY CEO") headline:("cut sell"~3) OR headline:("lowered sell"~3) OR headline:("PT lowered") OR headline:("cut neutral"~3) OR headline:("lowered neutral"~3) OR headline:("cut hold"~3) OR headline:("lowered hold"~3) OR headline:("hold rating"~3) OR headline:("raised buy"~4) OR headline:("raised to") OR headline:("lowered buy"~4) OR headline:("rating buy"~4) OR headline:("rating add"~4) OR headline:("lowered underperform"~3) OR headline:("outperform") OR headline:("downgraded by") OR headline:("upgraded by") OR headline:("downgraded to") OR headline:("upgraded to") OR headline:("announces dividend"~3) OR headline:("plans dividend"~3) headline:("issues dividend"~3) OR headline:("shares sold") OR headline:("shares bought") OR ("shares reached high"~9) OR "research note issued to investors" OR "move per share"~8) OR "apply now" OR "Undergraduate degree or equivalent"~6 OR "your cv" OR "Add my CV to the" OR "We are currently looking for a" OR "a competitive salary" OR headline:("roadshow" OR "terms of service violation") OR headline:("best deals"~4 OR "thanksgiving travel"~4 OR "thanksgiving guide"~4 OR "happy thanksgiving" OR "best of 2018"~5 OR "black friday hours"~5 OR "black Friday freebies"~5 OR "stores open thanksgiving"~5 OR "stores open christmas"~5 OR "cyber monday" OR "black friday deal"~8 OR "thanksgiving dinner" OR santa OR "wedding announcements" OR "holiday sales" OR "white nationalist" OR "shooting" OR "mall shootings" OR "stabbing" OR "holiday gift" OR "family killed"~7 OR "killed by car" OR "apply now" OR obituary OR "entry level" OR "support worker" OR "a career within" OR "recipe" OR "Exclusive opportunity" OR "content acquisition")))) AND NOT ((feed_id:"101505" OR feed_id:"95622" OR feed_id:"104135" OR feed_id:"95624" OR feed_id:"6537" OR feed_id:"104138" OR feed_id:"104140" OR feed_id:"95629" OR feed_id:"92622" OR feed_id:"104366" OR feed_id:"99342" OR feed_id:"82520" OR feed_id:"94172" OR feed_id:"11967")) AND ((tags:content_us^999999999999) OR *:*) AND (((tags:"news_major"^99) OR feed_id:"108735"^99999999 OR feed_id:"68677"^99999999 OR feed_id:"89672"^99999999 OR feed_id:"94600"^99999999 OR feed_id:"95627"^99999999 OR feed_id:"11501"^99999999 OR feed_id:"3470"^99999999 OR feed_id:"53326"^99999999 OR feed_id:"42417"^99999999 OR feed_id:"43069"^99999999 OR feed_id:"108734"^99999999 OR feed_id:"75797"^99999999 OR feed_id:"107094"^99999999 OR feed_id:"48503"^99999999 OR feed_id:"105598"^99999999 OR feed_id:"11675"^99999999 OR feed_id:"28476"^99999999 OR feed_id:"57757"^99999999 OR feed_id:"99741"^99999999 OR feed_id:"70591"^99999999) OR *:*)) /* None */




Filter query parameters:
(valid_firms:(0 OR 1) OR (*:* AND -valid_firms:[* TO *]))

publication_type:(news OR blog OR press_release OR publication)

lang:(en OR es)

published_at:["2021-04-01T07:00:00Z" TO "2021-04-15T16:42:28.150394Z"]

OLD cluster query time
"QTime":1209,

NEW cluster query time – almost twice as long
"QTime":2316,

Thank you in advance for any help you can provide.


[Logo  Description automatically generated]
a MODERN GOVERNANCE company
Russell Bahr­­
Lead Infrastructure Engineer
543 NW York Drive | Suite 100 | Bend, OR 97703
Direct: 541-306-3271 | rbahr@manzama.com<ma...@manzama.com> | www.manzama.com<http://www.manzama.com>

Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

Posted by Charlie Hull <ch...@opensourceconnections.com>.
Hi Russell,

I don't think there's necessarily a magic bullet here, as in one setting 
that will solve the performance issues you're seeing. You need to break 
down which part of a slow query is costing the most - and as Alessandro 
suggests you need to do this carefully, starting with a stripped down, 
basic query and adding the other parts in until you see what causes the 
problem. There's a *lot* of things that can impact performance in 
something as complex as Solr.

You might find this post useful - it's some tools and techniques we used 
to help a client with ecommerce performance issues last year (just 
before Black Friday!) 
https://opensourceconnections.com/blog/2021/01/05/a-solr-performance-debugging-toolkit/

Best

Charlie

On 20/04/2021 17:38, Russell Bahr wrote:
> Hi Charlie and Alessandro,
>
> Thank you for your responses, yes, it is a monster query, and unfortunately, this is one of our smaller and faster performing queries. We were able to run this in solr4.10.4 significantly faster than in solr6.5.1, and solr6.5.1 is as you see significantly faster than solr8.7.0.
>
> Our application relies heavily on the grouping and ngroups as well as faceting and we have looked into other ways of getting the results that we get from those but it would be a major rewrite to try to get those in a different way and is not something we can try to do at this time.
>
> I have gone through the configs and the schema and believe I have made the correct changes in those for the defaults that changed through the updated versions but am wondering if there is something that I missed, or configured incorrectly in there that could be contributing to the slowness.  Does anyone have any suggestions to try in the schema.xml or maybe in solrconfig.xml.
>
> Thanks,
> Russ
>
>
> From: Charlie Hull <ch...@opensourceconnections.com>
> Organization: OpenSource Connections
> Reply-To: "users@solr.apache.org" <us...@solr.apache.org>
> Date: Tuesday, April 20, 2021 at 6:40 AM
> To: "users@solr.apache.org" <us...@solr.apache.org>
> Subject: Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1
>
> Hi Russell,
>
> Your complex Boolean query and the amount of new documents you're adding
> every day remind me of the media monitoring applications I've seen for
> Solr. The way these were made performant (for people like Bloomberg) was
> to run them as a reverse search: e.g. to test each documents against a
> set of stored queries, rather than running a set of queries over an
> index. We built Luwak (now contributed as the Lucene Monitor) for this
> very purpose. https://www.flax.co.uk/index.html@p=3058.html<https://www.flax.co.uk/index.html@p=3058.html> has a short
> writeup.
>
> As Alessandro has suggested you'll need to break down and figure out
> which part of your big query is causing the performance issue, which may
> lead you to a recent change in Solr, but I feel you also need to
> consider whether your overall architecture is suitable for your use
> case. I also wonder how maintainable your giant queries are and if
> anyone really understands the interplay of the various boosts and
> Booleans. If you've got lots of queries like this and if they're
> something users can generate/modify at will that won't help either.
>
> Best
>
> Charlie
>
> On 20/04/2021 00:37, Russell Bahr wrote:
>> We are trying to upgrade our solr clusters and are running into
>> performance issues when moving to the newer version. We are finding
>> that queries are taking more than double the amount of time to return
>> when provided with the same query and both clusters are indexed with
>> the same documents. The queries that we run are using booting as well
>> as groups and ngroups. Our original clusters were solr 4.10.4 and we
>> experienced a similar degradation going from 4.10.4 to 6.5.1 and were
>> able to get around that by splitting the work from one 30 server
>> cluster to two clusters one with 30 servers and a second with 35
>> clusters. It is not acceptable for us to more than double our clusters
>> again. I have gone through the documentation and made changes to the
>> schema and solr config as needed to upgrade but am still not sure why
>> we are experiencing such a dramatic degradation in performance.
>>
>> We are indexing about 550000 new documents daily and updating around
>> 550000 documents daily as well.
>>
>> The clusters are configured as follows with schema and configs and a
>> sample query that I am running against both cluster examples.
>>
>> Old cluster:
>> Solr 6.5.1
>> 31 GB heap
>> OpenJDK 64-Bit Server VM - 1.8.0_275-8u275-b01-1~deb9u1-b01
>>
>> Shards -6 Replicas -5
>>
>> /18643418 docs/
>>
>> /Avg size/doc: 2.6Kb/
>>
>> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>>
>> {
>>
>>    "*responseHeader*":{
>>
>>      "*zkConnected*":true,
>>
>>      "*status*":0,
>>
>>      "*QTime*":2665,
>>
>>      "*params*":{
>>
>>        "*q*":"*:*",
>>
>>        "*indent*":"on",
>>
>>        "*wt*":"json",
>>
>>        "*_*":"1618866411985"}},
>>
>>    "*grouped*":{
>>
>>      "*fingerprint*":{
>>
>>        "*matches*":18728759,
>>
>>        "*ngroups*":14295515,
>>
>>        "*groups*":[{
>>
>> …
>>
>>
>>
>> New cluster: - this query takes about *10* times as long.
>> Solr 8.7.0
>> 31 GB heap
>> OpenJDK 64-Bit Server VM - 11.0.9.1+1-post-Debian-1deb10u2
>>
>> Shards -5 Replicas -5
>> /18643418 docs/
>>
>> /Avg size/doc: 2.6Kb/
>>
>> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>>
>> {
>>
>>    "*responseHeader*":{
>>
>>      "*zkConnected*":true,
>>
>>      "*status*":0,
>>
>>      "*QTime*":27876,
>>
>>      "*params*":{
>>
>>        "*q*":"*:*",
>>
>>        "*wt*":"json",
>>
>>        "*_*":"1618866396857"}},
>>
>>    "*grouped*":{
>>
>>      "*fingerprint*":{
>>
>>        "*matches*":18730577,
>>
>>        "*ngroups*":13988977,
>>
>> …
>>
>> Solr 6.5.1
>>
>> solr 6.5.1 schema.xml
>>
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <schema name="articles" version="1.5">
>>      <uniqueKey>id</uniqueKey>
>>      <defaultSearchField>text</defaultSearchField>
>>      <solrQueryParser defaultOperator="AND" />
>>
>>      <fieldType name="string" class="solr.StrField"
>> sortMissingLast="true" omitNorms="true"/>
>>      <fieldType name="boolean" class="solr.BoolField"
>> sortMissingLast="true" omitNorms="true"/>
>>      <fieldType name="int" class="solr.TrieIntField" precisionStep="0"
>> positionIncrementGap="0"/>
>>      <fieldType name="float" class="solr.TrieFloatField"
>> precisionStep="0" positionIncrementGap="0"/>
>>      <fieldType name="long" class="solr.TrieLongField"
>> precisionStep="0" positionIncrementGap="0"/>
>>      <fieldType name="double" class="solr.TrieDoubleField"
>> precisionStep="0" positionIncrementGap="0"/>
>>      <fieldType name="date" class="solr.TrieDateField" omitNorms="true"
>> precisionStep="6" positionIncrementGap="0"/>
>>
>> <!-- lowercases the entire field value, keeping it as a single token.  -->
>> <fieldType name="lowercase" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">
>>          <analyzer>
>>              <tokenizer class="solr.KeywordTokenizerFactory"/>
>>              <filter class="solr.LowerCaseFilterFactory" />
>>          </analyzer>
>>     </fieldType>
>>
>> <!-- Exact text, without word stemming -->
>> <fieldType name="exact_text" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">
>>          <analyzer type="index">
>>              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>         <filter class="solr.FlattenGraphFilterFactory"/>
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>          </analyzer>
>>     <analyzer type="query">
>>       <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.SynonymFilterFactory"
>> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>          </analyzer>
>>      </fieldType>
>>
>> <!-- Exact text, case-sensitive, without word stemming -->
>> <fieldType name="exact_text_and_case" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">
>>          <analyzer type="index">
>>              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>         <filter class="solr.FlattenGraphFilterFactory"/>
>>          </analyzer>
>>     <analyzer type="query">
>>       <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.SynonymFilterFactory"
>> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>          </analyzer>
>>      </fieldType>
>>
>> <!-- Exact text (without word stemming) but normalized. Used for the
>> headline field -->
>> <fieldType name="exact_text_normalized" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="false">
>>          <analyzer type="index">
>>              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>         <filter class="solr.FlattenGraphFilterFactory"/>
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>          </analyzer>
>>     <analyzer type="query">
>>       <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.SynonymFilterFactory"
>> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>          </analyzer>
>>      </fieldType>
>>
>> <!-- The default (stemmed) text field for general queries -->
>> <fieldType name="text" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">
>>          <analyzer type="index">
>>              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>         <filter class="solr.FlattenGraphFilterFactory"/>
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>              <filter class="solr.ASCIIFoldingFilterFactory"
>> preserveOriginal="true"/>
>>              <filter class="solr.SnowballPorterFilterFactory"
>> language="English" />
>>          </analyzer>
>>          <analyzer type="query">
>>              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>              <filter class="solr.SynonymFilterFactory"
>> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>>              <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0"
>> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>>              <filter class="solr.LowerCaseFilterFactory"/>
>>              <filter class="solr.ASCIIFoldingFilterFactory"
>> preserveOriginal="true"/>
>>              <filter class="solr.SnowballPorterFilterFactory"
>> language="English" />
>>          </analyzer>
>>      </fieldType>
>>
>> <!-- General -->
>> <field name="id" type="string" indexed="true" stored="true"
>> multiValued="false" required="true" docValues="true"/>
>>      <field name="django_ct" type="string" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>      <field name="django_id" type="string" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>      <field name="lang" type="string" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>
>> <!-- Content -->
>> <field name="headline" type="exact_text_normalized" indexed="true"
>> stored="true" multiValued="false" />
>> <!-- <field name="intro" type="text" indexed="true" stored="false"
>> multiValued="false" /> -->
>> <field name="intro" type="exact_text_normalized" indexed="true"
>> stored="false" multiValued="false" />
>>      <field name="text" type="text" indexed="true" stored="false"
>> multiValued="false" />
>>      <field name="content" type="text" indexed="false" stored="true"
>> multiValued="false" />
>>      <field name="content_fulltext" type="text" stored="false"
>> indexed="true" multiValued="false" />
>>      <field name="content_exact" type="exact_text" stored="false"
>> indexed="true" multiValued="false" /> <!-- generated from `text` -->
>> <field name="content_exact_case" type="exact_text_and_case"
>> stored="false" indexed="true" multiValued="false" /> <!-- generated
>> from `text` -->
>>
>>
>>      <!-- Source Data -->
>> <field name="published_at" type="date" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>      <field name="publication_type" type="string" indexed="true"
>> stored="true" multiValued="false" docValues="true" />
>>      <field name="feed_id" type="long" indexed="true" stored="true"
>> multiValued="true" docValues="true" />
>>      <field name="subscription" type="int" indexed="true"
>> stored="false" docValues="true" />
>>      <field name="priority_fetch" type="boolean" indexed="true"
>> stored="true" />
>>
>> <!-- Ranking -->
>> <field name="priority" type="float" indexed="true" stored="false"
>> multiValued="false" docValues="true" />
>>      <field name="site_rank" type="long" indexed="true" stored="false"
>> multiValued="false" docValues="true" />
>>      <field name="combined_priority_weight" type="float" indexed="true"
>> stored="true" multiValued="false" docValues="true" />
>>      <field name="valid_firms" type="long" indexed="true"
>> stored="false" multiValued="true" docValues="true" />
>>
>> <!-- Pre-Tagging of Saved Searches -->
>> <field name="ss" type="long" indexed="true" stored="false"
>> multiValued="true" docValues="true" />
>>      <field name="tags" type="string" indexed="true" stored="true"
>> multiValued="true" docValues="true" />
>>      <field name="last_taggable_change" type="date" indexed="true"
>> stored="true" multiValued="false" docValues="true" />
>>      <field name="tagged_topics" type="long" indexed="true"
>> stored="true" multiValued="true" docValues="true" />
>>      <field name="tagged_about_sources" type="long" indexed="true"
>> stored="true" multiValued="true" docValues="true" />
>>      <field name="tagged_created_sources" type="long" indexed="true"
>> stored="true" multiValued="true" docValues="true" />
>>
>> <!-- Event Specific -->
>> <field name="end_date" type="date" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>      <field name="start_date" type="date" indexed="true" stored="true"
>> multiValued="false" docValues="true" />
>>
>> <!-- Twitter specific -->
>> <field name="tweeter" type="lowercase" indexed="true" stored="true"
>> multiValued="false" />
>>
>> <!-- Functional -->
>> <field name="fingerprint" type="string" stored="false" indexed="true"
>> multiValued="false" docValues="true" />
>>      <field name="_version_" type="long" indexed="true" stored="true"
>> docValues="true" />
>>
>> <!-- Copy text into content_exact -->
>> <copyField source="text" dest="content_exact" />
>>      <copyField source="text" dest="content_exact_case" />
>>
>> <!-- Insights -->
>> <field name="has_signal" type="int" indexed="true" stored="true"
>> multiValued="false"
>> docValues="true" />
>>
>> <!-- Industry Entities -->
>> <field name="industry_tags" type="long" indexed="true" stored="true"
>> multiValued="true" docValues="true" />
>>
>> </schema>
>>
>> solr 6.5.1 solrconfig.xml
>>
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <config>
>>
>>
>> <luceneMatchVersion>6.5.1</luceneMatchVersion>
>>
>> <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
>>    <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
>>
>>    <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
>>    <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
>>
>>    <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
>>    <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
>>
>>    <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
>>    <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
>>
>> <lib dir="/total/crap/dir/ignored" />
>>
>> <dataDir>${solr.data.dir:}</dataDir>
>>
>>    <schemaFactory class="ClassicIndexSchemaFactory"/>
>>
>> <directoryFactory name="DirectoryFactory"
>> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>>
>> <indexConfig>
>>
>> </indexConfig>
>>
>> <jmx />
>>
>> <updateHandler class="solr.DirectUpdateHandler2">
>>
>> <autoCommit>
>>         <maxTime>600000</maxTime>
>>         <openSearcher>false</openSearcher>
>>       </autoCommit>
>>
>> <autoSoftCommit>
>>          <maxTime>120000</maxTime>
>>        </autoSoftCommit>
>>
>>
>> <updateLog>
>>        <str name="dir">${solr.data.dir:}</str>
>>      </updateLog>
>>
>>    </updateHandler>
>>
>> <query>
>>
>> <maxBooleanClauses>4096</maxBooleanClauses>
>>
>> <filterCache class="solr.LRUCache"
>> size="3600"
>> initialSize="128"
>> autowarmCount="128"/>
>>
>> <queryResultCache class="solr.LRUCache"
>> size="1024"
>> initialSize="64"
>> autowarmCount="64"/>
>>
>> <documentCache class="solr.LRUCache"
>> size="4096"
>> initialSize="128"
>> autowarmCount="0"/>
>>
>> <enableLazyFieldLoading>true</enableLazyFieldLoading>
>>
>> <queryResultWindowSize>20</queryResultWindowSize>
>>
>> <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
>>
>> <listener event="newSearcher" class="solr.QuerySenderListener">
>>        <arr name="queries">
>> </arr>
>>      </listener>
>>      <listener event="firstSearcher" class="solr.QuerySenderListener">
>>        <arr name="queries">
>>          <lst>
>>            <str name="q">static firstSearcher warming in
>> solrconfig.xml</str>
>>          </lst>
>>        </arr>
>>      </listener>
>>
>> <useColdSearcher>true</useColdSearcher>
>>
>> <maxWarmingSearchers>4</maxWarmingSearchers>
>>
>>    </query>
>>
>> <requestDispatcher handleSelect="false" >
>>
>> <requestParsers enableRemoteStreaming="false"
>> multipartUploadLimitInKB="2048000" />
>>
>> <httpCaching never304="true" />
>>
>> </requestDispatcher>
>>
>> <requestHandler name="/select" class="solr.SearchHandler">
>> <lst name="defaults">
>>         <str name="echoParams">explicit</str>
>>         <int name="rows">10</int>
>>         <str name="df">text</str>
>>         <str name="group">true</str>
>>         <str name="group.field">fingerprint</str>
>>         <int name="group.limit">6</int>
>>         <str name="group.ngroups">true</str>
>>         <int name="f.feed_id.facet.mincount">1</int>
>>         <int name="f.linked_searches.facet.mincount">1</int>
>> <int name="timeAllowed">120000</int>
>>       </lst>
>>
>> </requestHandler>
>>
>> <requestHandler name="/get" class="solr.RealTimeGetHandler">
>>       <lst name="defaults">
>>         <str name="omitHeader">true</str>
>>         <str name="wt">json</str>
>>         <str name="indent">true</str>
>>       </lst>
>>    </requestHandler>
>>
>> <requestHandler name="/export" class="solr.SearchHandler">
>>      <lst name="invariants">
>>        <str name="rq">{!xport}</str>
>>        <str name="wt">xsort</str>
>>        <str name="distrib">false</str>
>>      </lst>
>>
>>      <arr name="components">
>>        <str>query</str>
>>      </arr>
>>    </requestHandler>
>>
>> <requestHandler name="/update" class="solr.UpdateRequestHandler">
>> </requestHandler>
>>
>> <requestHandler name="/update/extract"
>> startup="lazy"
>> class="solr.extraction.ExtractingRequestHandler" >
>>      <lst name="defaults">
>>        <str name="lowernames">true</str>
>>        <str name="uprefix">ignored_</str>
>>
>> <!-- capture link hrefs but ignore div attributes -->
>> <str name="captureAttr">true</str>
>>        <str name="fmap.a">links</str>
>>        <str name="fmap.div">ignored_</str>
>>      </lst>
>>    </requestHandler>
>>
>> <requestHandler name="/analysis/field"
>> startup="lazy"
>> class="solr.FieldAnalysisRequestHandler" />
>>
>> <requestHandler name="/analysis/document"
>> class="solr.DocumentAnalysisRequestHandler"
>> startup="lazy" />
>>
>> <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>>      <lst name="invariants">
>>        <str name="q">solrpingquery</str>
>>      </lst>
>>      <lst name="defaults">
>>        <str name="echoParams">all</str>
>>      </lst>
>> </requestHandler>
>>
>> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>>      <lst name="defaults">
>>       <str name="echoParams">explicit</str>
>>       <str name="echoHandler">true</str>
>>      </lst>
>>    </requestHandler>
>>
>> <requestHandler name="/replication" class="solr.ReplicationHandler"
>> startup="lazy" />
>>
>> <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
>>
>>      <str name="queryAnalyzerFieldType">textSpell</str>
>>
>> <lst name="spellchecker">
>>        <str name="name">default</str>
>>        <str name="field">name</str>
>>        <str name="classname">solr.DirectSolrSpellChecker</str>
>> <str name="distanceMeasure">internal</str>
>> <float name="accuracy">0.5</float>
>> <int name="maxEdits">2</int>
>> <int name="minPrefix">1</int>
>> <int name="maxInspections">5</int>
>> <int name="minQueryLength">4</int>
>> <float name="maxQueryFrequency">0.01</float>
>> </lst>
>>
>> <lst name="spellchecker">
>>        <str name="name">wordbreak</str>
>>        <str name="classname">solr.WordBreakSolrSpellChecker</str>
>>        <str name="field">name</str>
>>        <str name="combineWords">true</str>
>>        <str name="breakWords">true</str>
>>        <int name="maxChanges">10</int>
>>      </lst>
>>
>> </searchComponent>
>>
>> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>>
>> <searchComponent name="clustering"
>> enable="${solr.clustering.enabled:false}"
>> class="solr.clustering.ClusteringComponent" >
>> <lst name="engine">
>> <str name="name">default</str>
>> <str
>> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
>> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
>> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
>> <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
>>      </lst>
>>      <lst name="engine">
>>        <str name="name">stc</str>
>>        <str
>> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>>      </lst>
>>    </searchComponent>
>>
>> <requestHandler name="/clustering"
>> startup="lazy"
>> enable="${solr.clustering.enabled:false}"
>> class="solr.SearchHandler">
>>      <lst name="defaults">
>>        <bool name="clustering">true</bool>
>>        <str name="clustering.engine">default</str>
>>        <bool name="clustering.results">true</bool>
>> <str name="carrot.title">name</str>
>>        <str name="carrot.url">id</str>
>> <str name="carrot.snippet">features</str>
>> <bool name="carrot.produceSummary">true</bool>
>> <bool name="carrot.outputSubClusters">false</bool>
>>
>>         <str name="defType">edismax</str>
>>         <str name="qf">
>> text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
>> </str>
>>         <str name="q.alt">*:*</str>
>>         <str name="rows">10</str>
>>         <str name="fl">*,score</str>
>>      </lst>
>>      <arr name="last-components">
>>        <str>clustering</str>
>>      </arr>
>>    </requestHandler>
>>
>> <searchComponent name="terms" class="solr.TermsComponent"/>
>>
>> <searchComponent name="elevator" class="solr.QueryElevationComponent" >
>> <str name="queryFieldType">string</str>
>>      <str name="config-file">elevate.xml</str>
>>    </searchComponent>
>>
>> <searchComponent class="solr.HighlightComponent" name="highlight">
>>      <highlighting>
>> <fragmenter name="gap"
>> default="true"
>> class="solr.highlight.GapFragmenter">
>>          <lst name="defaults">
>>            <int name="hl.fragsize">100</int>
>>          </lst>
>>        </fragmenter>
>> <fragmenter name="regex"
>> class="solr.highlight.RegexFragmenter">
>>          <lst name="defaults">
>> <int name="hl.fragsize">70</int>
>> <float name="hl.regex.slop">0.5</float>
>> <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
>>          </lst>
>>        </fragmenter>
>>
>> <formatter name="html"
>> default="true"
>> class="solr.highlight.HtmlFormatter">
>>          <lst name="defaults">
>>            <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>>            <str name="hl.simple.post"><![CDATA[</em>]]></str>
>>          </lst>
>>        </formatter>
>>
>> <encoder name="html"
>> class="solr.highlight.HtmlEncoder" />
>>
>> <fragListBuilder name="simple"
>> class="solr.highlight.SimpleFragListBuilder"/>
>>
>> <fragListBuilder name="single"
>> class="solr.highlight.SingleFragListBuilder"/>
>>
>> <fragListBuilder name="weighted"
>> default="true"
>> class="solr.highlight.WeightedFragListBuilder"/>
>>
>> <fragmentsBuilder name="default"
>> default="true"
>> class="solr.highlight.ScoreOrderFragmentsBuilder">
>> </fragmentsBuilder>
>>
>> <fragmentsBuilder name="colored"
>> class="solr.highlight.ScoreOrderFragmentsBuilder">
>>          <lst name="defaults">
>>            <str name="hl.tag.pre"><![CDATA[
>>                 <b style="background:yellow">,<b
>> style="background:lawgreen">,
>>                 <b style="background:aquamarine">,<b
>> style="background:magenta">,
>>                 <b style="background:palegreen">,<b
>> style="background:coral">,
>>                 <b style="background:wheat">,<b style="background:khaki">,
>>                 <b style="background:lime">,<b
>> style="background:deepskyblue">]]></str>
>>            <str name="hl.tag.post"><![CDATA[</b>]]></str>
>>          </lst>
>>        </fragmentsBuilder>
>>
>>        <boundaryScanner name="default"
>> default="true"
>> class="solr.highlight.SimpleBoundaryScanner">
>>          <lst name="defaults">
>>            <str name="hl.bs.maxScan">10</str>
>>            <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>>          </lst>
>>        </boundaryScanner>
>>
>>        <boundaryScanner name="breakIterator"
>> class="solr.highlight.BreakIteratorBoundaryScanner">
>>          <lst name="defaults">
>> <str name="hl.bs.type">WORD</str>
>> <str name="hl.bs.language">en</str>
>>            <str name="hl.bs.country">US</str>
>>          </lst>
>>        </boundaryScanner>
>>      </highlighting>
>>    </searchComponent>
>>
>> <queryResponseWriter name="json" class="solr.JSONResponseWriter">
>> <str name="content-type">text/plain; charset=UTF-8</str>
>>    </queryResponseWriter>
>>
>> <queryResponseWriter name="velocity"
>> class="solr.VelocityResponseWriter" startup="lazy"/>
>>
>> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>>      <int name="xsltCacheLifetimeSeconds">5</int>
>>    </queryResponseWriter>
>>
>>    <!-- Legacy config for the admin interface -->
>> <admin>
>>      <defaultQuery>*:*</defaultQuery>
>>    </admin>
>>
>> </config>
>>
>> Solr 8.7.0
>>
>> solr 8.7.0 schema.xml
>>
>> <?xml version="1.0" encoding="UTF-8" ?> <schema name="articles"
>> version="1.6">     <uniqueKey>id</uniqueKey> <!--Define default scorer
>> --> <similarity class="solr.LegacyBM25SimilarityFactory"/>
>> <!--Depricated in solr 8 -->
>> <!--<defaultSearchField>text</defaultSearchField> -->
>> <!--<solrQueryParser defaultOperator="AND" /> -->     <!--Define
>> fieldTypes Trie* has been replaced by *PointField--> <fieldType
>> name="string" class="solr.StrField" sortMissingLast="true"
>> omitNorms="true"/>     <fieldType name="boolean"
>> class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
>> <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
>>      <fieldType name="pfloat" class="solr.FloatPointField"
>> docValues="true"/>    <fieldType name="plong"
>> class="solr.LongPointField" docValues="true"/>     <fieldType
>> name="pdouble" class="solr.DoublePointField" docValues="true" />
>> <fieldType name="pdate" class="solr.DatePointField" omitNorms="true"
>> docValues="true"/> <!-- lowercases the entire field value, keeping it
>> as a single token.  --> <fieldType name="lowercase"
>> class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>>          <analyzer>             <tokenizer
>> class="solr.KeywordTokenizerFactory"/>             <filter
>> class="solr.LowerCaseFilterFactory" />         </analyzer>
>> </fieldType> <!-- Exact text, without word stemming --> <fieldType
>> name="exact_text" class="solr.TextField" positionIncrementGap="100"
>> omitNorms="true">         <analyzer type="index">
>> <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>> <filter class="solr.WordDelimiterGraphFilterFactory"
>> generateWordParts="1" generateNumberParts="0" catenateWords="1"
>> catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
>> />        <filter class="solr.FlattenGraphFilterFactory"/>
>> <filter class="solr.LowerCaseFilterFactory"/>         </analyzer>
>> <analyzer type="query">      <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
>> ignoreCase="true" expand="true"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />             <filter
>> class="solr.LowerCaseFilterFactory"/>         </analyzer>
>> </fieldType> <!-- Exact text, case-sensitive, without word stemming
>> --> <fieldType name="exact_text_and_case" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">         <analyzer
>> type="index">             <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />        <filter
>> class="solr.FlattenGraphFilterFactory"/>         </analyzer>
>> <analyzer type="query">      <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
>> ignoreCase="true" expand="true"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />         </analyzer>
>>      </fieldType> <!-- Exact text (without word stemming) but
>> normalized. Used for the headline field --> <fieldType
>> name="exact_text_normalized" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">         <analyzer
>> type="index">             <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />        <filter
>> class="solr.FlattenGraphFilterFactory"/>             <filter
>> class="solr.LowerCaseFilterFactory"/>         </analyzer>    <analyzer
>> type="query">      <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
>> ignoreCase="true" expand="true"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />             <filter
>> class="solr.LowerCaseFilterFactory"/>         </analyzer>
>> </fieldType> <!-- The default (stemmed) text field for general queries
>> --> <fieldType name="text" class="solr.TextField"
>> positionIncrementGap="100" omitNorms="true">         <analyzer
>> type="index">             <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />        <filter
>> class="solr.FlattenGraphFilterFactory"/>             <filter
>> class="solr.LowerCaseFilterFactory"/>             <filter
>> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>>              <filter class="solr.SnowballPorterFilterFactory"
>> language="English" />         </analyzer>         <analyzer
>> type="query">             <tokenizer
>> class="solr.WhitespaceTokenizerFactory"/>            <filter
>> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
>> ignoreCase="true" expand="true"/>             <filter
>> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
>> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
>> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
>> splitOnCaseChange="0" types="content-types.txt" />             <filter
>> class="solr.LowerCaseFilterFactory"/>             <filter
>> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>>              <filter class="solr.SnowballPorterFilterFactory"
>> language="English" />         </analyzer>     </fieldType> <!--
>> General --> <field name="id" type="string" indexed="true"
>> stored="true" multiValued="false" required="true" docValues="true"/>
>>      <field name="django_ct" type="string" indexed="true" stored="true"
>> multiValued="false" docValues="true" />     <field name="django_id"
>> type="string" indexed="true" stored="true" multiValued="false"
>> docValues="true" />     <field name="lang" type="string"
>> indexed="true" stored="true" multiValued="false" docValues="true" />
>> <!-- Content --> <field name="headline" type="exact_text_normalized"
>> indexed="true" stored="true" multiValued="false" /> <!-- <field
>> name="intro" type="text" indexed="true" stored="false"
>> multiValued="false" /> --> <field name="intro"
>> type="exact_text_normalized" indexed="true" stored="false"
>> multiValued="false" />     <field name="text" type="text"
>> indexed="true" stored="false" multiValued="false" />     <field
>> name="content" type="text" indexed="false" stored="true"
>> multiValued="false" />     <field name="content_fulltext" type="text"
>> stored="false" indexed="true" multiValued="false" />     <field
>> name="content_exact" type="exact_text" stored="false" indexed="true"
>> multiValued="false" /> <!-- generated from `text` --> <field
>> name="content_exact_case" type="exact_text_and_case" stored="false"
>> indexed="true" multiValued="false" /> <!-- generated from `text` -->
>>      <!-- Source Data --> <field name="published_at" type="pdate"
>> indexed="true" stored="true" multiValued="false" docValues="true" />
>>      <field name="publication_type" type="string" indexed="true"
>> stored="true" multiValued="false" docValues="true" />     <field
>> name="feed_id" type="plong" indexed="true" stored="true"
>> multiValued="true" docValues="true" />     <field name="subscription"
>> type="pint" indexed="true" stored="false" docValues="true" />
>> <field name="priority_fetch" type="boolean" indexed="true"
>> stored="true" /> <!-- Ranking --> <field name="priority" type="pfloat"
>> indexed="true" stored="false" multiValued="false" docValues="true" />
>>      <field name="site_rank" type="plong" indexed="true" stored="false"
>> multiValued="false" docValues="true" />     <field
>> name="combined_priority_weight" type="pfloat" indexed="true"
>> stored="true" multiValued="false" docValues="true" />     <field
>> name="valid_firms" type="plong" indexed="true" stored="false"
>> multiValued="true" docValues="true" /> <!-- Pre-Tagging of Saved
>> Searches --> <field name="ss" type="plong" indexed="true"
>> stored="false" multiValued="true" docValues="true" />     <field
>> name="tags" type="string" indexed="true" stored="true"
>> multiValued="true" docValues="true" />     <field
>> name="last_taggable_change" type="pdate" indexed="true" stored="true"
>> multiValued="false" docValues="true" />     <field
>> name="tagged_topics" type="plong" indexed="true" stored="true"
>> multiValued="true" docValues="true" />     <field
>> name="tagged_about_sources" type="plong" indexed="true" stored="true"
>> multiValued="true" docValues="true" />     <field
>> name="tagged_created_sources" type="plong" indexed="true"
>> stored="true" multiValued="true" docValues="true" /> <!-- Event
>> Specific --> <field name="end_date" type="pdate" indexed="true"
>> stored="true" multiValued="false" docValues="true" />     <field
>> name="start_date" type="pdate" indexed="true" stored="true"
>> multiValued="false" docValues="true" /> <!-- Twitter specific -->
>> <field name="tweeter" type="lowercase" indexed="true" stored="true"
>> multiValued="false" /> <!-- Functional --> <field name="fingerprint"
>> type="string" stored="false" indexed="true" multiValued="false"
>> docValues="true" />     <field name="_version_" type="plong"
>> indexed="true" stored="true" docValues="true" /> <!-- Copy text into
>> content_exact --> <copyField source="text" dest="content_exact" />
>> <copyField source="text" dest="content_exact_case" /> <!-- Insights
>> --> <field name="has_signal" type="pint" indexed="true" stored="true"
>> multiValued="false" docValues="true" /> <!-- Industry Entities -->
>> <field name="industry_tags" type="plong" indexed="true" stored="true"
>> multiValued="true" docValues="true" /> </schema>
>>
>> solr 8.7.0 solrconfig.xml
>>
>> <?xml version="1.0" encoding="UTF-8" ?> <config>
>> <luceneMatchVersion>8.7.0</luceneMatchVersion> <lib
>> dir="${solr.install.dir:../../../..}/contrib/extraction/lib"
>> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
>> regex="solr-cell-\d.*\.jar" />   <lib
>> dir="${solr.install.dir:../../../..}/contrib/clustering/lib/"
>> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
>> regex="solr-clustering-\d.*\.jar" />   <lib
>> dir="${solr.install.dir:../../../..}/contrib/langid/lib/"
>> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
>> regex="solr-langid-\d.*\.jar" />   <lib
>> dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar"
>> />   <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib"
>> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
>> regex="solr-velocity-\d.*\.jar" />
>> <dataDir>${solr.data.dir:}</dataDir> <directoryFactory
>> name="DirectoryFactory"
>> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>>        <schemaFactory class="ClassicIndexSchemaFactory">
>> </schemaFactory> <codecFactory class="solr.SchemaCodecFactory"/>
>> <indexConfig> <mergePolicyFactory
>> class="org.apache.solr.index.TieredMergePolicyFactory">           <int
>> name="maxMergeAtOnce">10</int>           <int
>> name="segmentsPerTier">2</int>           <double
>> name="noCFSRatio">0.1</double>         </mergePolicyFactory>
>> <lockType>${solr.lock.type:native}</lockType> </indexConfig>
>> <jmx />
>> <updateHandler class="solr.DirectUpdateHandler2">
>> <updateLog>       <str name="dir">${solr.ulog.dir:}</str>       <int
>> name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
>>      </updateLog> <autoCommit>        <maxTime>600000</maxTime>
>> <maxDocs>1000000</maxDocs>        <openSearcher>false</openSearcher>
>>       </autoCommit>
>> <autoSoftCommit>         <maxTime>120000</maxTime>
>> </autoSoftCommit> </updateHandler>
>> <query>
>> <maxBooleanClauses>4096</maxBooleanClauses>
>> <slowQueryThresholdMillis>100000</slowQueryThresholdMillis>
>> <filterCache class="solr.CaffeineCache" size="3600" initialSize="2048"
>> autowarmCount="2048"/>
>> <queryResultCache class="solr.CaffeineCache" size="1024"
>> initialSize="512" autowarmCount="512"/> <documentCache
>> class="solr.CaffeineCache" size="4096" initialSize="1024"
>> autowarmCount="1024"/> <cache name="perSegFilter"
>> class="solr.CaffeineCache" size="10" initialSize="0"
>> autowarmCount="10" regenerator="solr.NoOpRegenerator" />
>> <enableLazyFieldLoading>true</enableLazyFieldLoading>
>> <queryResultWindowSize>20</queryResultWindowSize>
>> <queryResultMaxDocsCached>200</queryResultMaxDocsCached> <listener
>> event="newSearcher" class="solr.QuerySenderListener">       <arr
>> name="queries"> </arr>     </listener>     <listener
>> event="firstSearcher" class="solr.QuerySenderListener">       <arr
>> name="queries">         <lst>           <str name="q">static
>> firstSearcher warming in solrconfig.xml</str>         </lst>
>> </arr>     </listener> <useColdSearcher>true</useColdSearcher>
>> <maxWarmingSearchers>4</maxWarmingSearchers>   </query>
>> <requestDispatcher>
>> <requestParsers enableRemoteStreaming="false"
>> multipartUploadLimitInKB="2048000" />
>> <httpCaching never304="true" />
>> </requestDispatcher> <requestHandler name="/select"
>> class="solr.SearchHandler"> <lst name="defaults">        <str
>> name="echoParams">explicit</str>        <int name="rows">10</int>
>>         <str name="df">text</str>        <str name="q.op">AND</str>
>>         <str name="group">true</str>        <str
>> name="group.field">fingerprint</str>        <int
>> name="group.limit">6</int>        <str name="group.ngroups">true</str>
>>         <int name="f.feed_id.facet.mincount">1</int>        <int
>> name="f.linked_searches.facet.mincount">1</int> <int
>> name="timeAllowed">120000</int> </lst>
>> </requestHandler> <requestHandler name="/get"
>> class="solr.RealTimeGetHandler">      <lst name="defaults">
>> <str name="omitHeader">true</str>        <str name="wt">json</str>
>>         <str name="indent">true</str>      </lst>   </requestHandler>
>> <requestHandler name="/export" class="solr.SearchHandler">     <lst
>> name="invariants">       <str name="rq">{!xport}</str>       <str
>> name="wt">xsort</str>       <str name="distrib">false</str>     </lst>
>>      <arr name="components">       <str>query</str>     </arr>
>> </requestHandler> <requestHandler name="/update"
>> class="solr.UpdateRequestHandler"> </requestHandler> <requestHandler
>> name="/update/extract" startup="lazy"
>> class="solr.extraction.ExtractingRequestHandler" >     <lst
>> name="defaults">       <str name="lowernames">true</str>       <str
>> name="uprefix">ignored_</str> <str name="captureAttr">true</str>
>>   <str name="fmap.a">links</str>       <str
>> name="fmap.div">ignored_</str>     </lst>   </requestHandler>
>> <requestHandler name="/analysis/field" startup="lazy"
>> class="solr.FieldAnalysisRequestHandler" />   <requestHandler
>> name="/analysis/document" class="solr.DocumentAnalysisRequestHandler"
>> startup="lazy" />
>> <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>>      <lst name="invariants">       <str name="q">solrpingquery</str>
>>      </lst>     <lst name="defaults">       <str
>> name="echoParams">all</str>     </lst> </requestHandler>
>> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>>      <lst name="defaults">      <str name="echoParams">explicit</str>
>>       <str name="echoHandler">true</str>     </lst>   </requestHandler>
>> <requestHandler name="/replication" class="solr.ReplicationHandler"
>> startup="lazy" /> <searchComponent name="spellcheck"
>> class="solr.SpellCheckComponent">     <str
>> name="queryAnalyzerFieldType">textSpell</str> <lst
>> name="spellchecker">       <str name="name">default</str>       <str
>> name="field">name</str>       <str
>> name="classname">solr.DirectSolrSpellChecker</str> <str
>> name="distanceMeasure">internal</str> <float
>> name="accuracy">0.5</float> <int name="maxEdits">2</int> <int
>> name="minPrefix">1</int> <int name="maxInspections">5</int> <int
>> name="minQueryLength">4</int> <float
>> name="maxQueryFrequency">0.01</float> </lst> <lst name="spellchecker">
>>        <str name="name">wordbreak</str>       <str
>> name="classname">solr.WordBreakSolrSpellChecker</str>       <str
>> name="field">name</str>       <str name="combineWords">true</str>
>>        <str name="breakWords">true</str>       <int
>> name="maxChanges">10</int>     </lst> </searchComponent>
>> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>> <searchComponent name="clustering"
>> enable="${solr.clustering.enabled:false}"
>> class="solr.clustering.ClusteringComponent" > <lst name="engine"> <str
>> name="name">default</str> <str
>> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
>> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
>> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str> <str
>> name="MultilingualClustering.defaultLanguage">ENGLISH</str>     </lst>
>>      <lst name="engine">       <str name="name">stc</str>       <str
>> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>>      </lst>   </searchComponent> <requestHandler name="/clustering"
>> startup="lazy" enable="${solr.clustering.enabled:false}"
>> class="solr.SearchHandler">     <lst name="defaults">       <bool
>> name="clustering">true</bool>       <str
>> name="clustering.engine">default</str>       <bool
>> name="clustering.results">true</bool> <str
>> name="carrot.title">name</str>       <str name="carrot.url">id</str>
>> <str name="carrot.snippet">features</str> <bool
>> name="carrot.produceSummary">true</bool> <bool
>> name="carrot.outputSubClusters">false</bool>        <str
>> name="defType">edismax</str>        <str name="qf"> text^0.5
>> features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 </str>
>> <str name="q.alt">*:*</str>        <str name="rows">10</str>
>> <str name="fl">*,score</str>     </lst>     <arr
>> name="last-components">       <str>clustering</str>     </arr>
>> </requestHandler>
>> <searchComponent name="terms" class="solr.TermsComponent"/>
>> <searchComponent name="elevator" class="solr.QueryElevationComponent"
>>> <str name="queryFieldType">string</str>     <str
>> name="config-file">elevate.xml</str>   </searchComponent>
>> <searchComponent class="solr.HighlightComponent" name="highlight">
>> <highlighting> <fragmenter name="gap" default="true"
>> class="solr.highlight.GapFragmenter">         <lst name="defaults">
>>            <int name="hl.fragsize">100</int>         </lst>
>> </fragmenter> <fragmenter name="regex"
>> class="solr.highlight.RegexFragmenter">         <lst name="defaults">
>> <int name="hl.fragsize">70</int> <float
>> name="hl.regex.slop">0.5</float> <str name="hl.regex.pattern">[-\w
>> ,/\n\&quot;&apos;]{20,200}</str>         </lst>       </fragmenter>
>> <formatter name="html" default="true"
>> class="solr.highlight.HtmlFormatter">         <lst name="defaults">
>>            <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>> <str name="hl.simple.post"><![CDATA[</em>]]></str>         </lst>
>>        </formatter> <encoder name="html"
>> class="solr.highlight.HtmlEncoder" /> <fragListBuilder name="simple"
>> class="solr.highlight.SimpleFragListBuilder"/> <fragListBuilder
>> name="single" class="solr.highlight.SingleFragListBuilder"/>
>> <fragListBuilder name="weighted" default="true"
>> class="solr.highlight.WeightedFragListBuilder"/> <fragmentsBuilder
>> name="default" default="true"
>> class="solr.highlight.ScoreOrderFragmentsBuilder"> </fragmentsBuilder>
>> <fragmentsBuilder name="colored"
>> class="solr.highlight.ScoreOrderFragmentsBuilder">         <lst
>> name="defaults">           <str name="hl.tag.pre"><![CDATA[
>>                 <b style="background:yellow">,<b
>> style="background:lawgreen">,                <b
>> style="background:aquamarine">,<b style="background:magenta">,
>>                 <b style="background:palegreen">,<b
>> style="background:coral">,                <b
>> style="background:wheat">,<b style="background:khaki">,
>> <b style="background:lime">,<b
>> style="background:deepskyblue">]]></str>           <str
>> name="hl.tag.post"><![CDATA[</b>]]></str>         </lst>
>> </fragmentsBuilder>       <boundaryScanner name="default"
>> default="true" class="solr.highlight.SimpleBoundaryScanner">
>> <lst name="defaults">           <str name="hl.bs.maxScan">10</str>
>>            <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>> </lst>       </boundaryScanner>       <boundaryScanner
>> name="breakIterator"
>> class="solr.highlight.BreakIteratorBoundaryScanner">         <lst
>> name="defaults"> <str name="hl.bs.type">WORD</str> <str
>> name="hl.bs.language">en</str>           <str
>> name="hl.bs.country">US</str>         </lst>       </boundaryScanner>
>>      </highlighting>   </searchComponent> <queryResponseWriter
>> name="json" class="solr.JSONResponseWriter"> <str
>> name="content-type">text/plain; charset=UTF-8</str>
>> </queryResponseWriter>
>> <queryResponseWriter name="velocity"
>> class="solr.VelocityResponseWriter" startup="lazy"/>
>> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>> <int name="xsltCacheLifetimeSeconds">5</int>   </queryResponseWriter>
>> <admin>     <defaultQuery>*:*</defaultQuery>   </admin> </config>
>>
>> Solr Query examples.
>>
>> *:*
>>
>> {!boost
>> b=sum(product(99999999999,has_signal),product(pow(priority,10),pow(recip(abs(ms(NOW/HOUR,published_at)),2.77e-09,1,1),5)))}((tags:Real_Est
>> OR (((headline:"real estate"^99999999999 OR headline:"commercial
>> development"^99999999999 OR headline:"commercial
>> developer"^99999999999 OR "Real Estate" OR "Real Property" OR
>> "property law" OR "Property Deal" OR "Property Sale" OR "purchase of
>> land" OR "Homeowners Association" OR content_exact:"HOA" OR "Board of
>> Realtors" OR content_exact:"Property Development" OR "CAP Rate" OR
>> content_exact:"Housing Demand" OR "CRE Finance Council" OR "Housing
>> Supply" OR "Property Tax" OR content_exact:"FHA" OR
>> content_exact:"Fully Leased" OR content_exact:"Represented the Buyer"
>> OR content_exact:"Design/Build" OR "Ad Valorem" OR "Anchor Tenant" OR
>> "Build to suit" OR "Certificate of Occupancy" OR "Eminent Domain" OR
>> "new office building" OR "new office development" OR "Adverse
>> possession" OR "Allodial title" OR "planning law" OR "planning
>> permission" OR "housebuilder" OR "housebiilding" OR
>> content_exact:"housebuilder" OR "Fee Simple" OR "Fee tail" OR "Quiet
>> Title" OR "Restraint on alienation" OR "Rule in Shelley" OR "Doctrine
>> of worthier title" OR "Worthier Title Doctrine" OR
>> content_exact:"Easement" OR "Equitable servitude")) OR
>> ((tagged_topics:(27) OR tagged_about_sources:(27) OR
>> tagged_created_sources:(27)) OR (tagged_topics:(107263) OR
>> tagged_about_sources:(107263) OR tagged_created_sources:(107263)) OR
>> (((content_exact:"Office Building" OR "Office Complex" OR "Office
>> Tower" OR "Office Space" OR "Office Center" OR "Office Campus" OR
>> "Class A Office" OR "Class B Office" OR "Class C Office" OR
>> content_exact:"Class A Building" OR content_exact:"Class B Building"
>> OR content_exact:"Class C Building" OR content_exact:"Class A Tower"
>> OR content_exact:"Class B Tower" OR content_exact:"Class C Tower" OR
>> content_exact:"corporate office" OR "office property" OR "office
>> properties"))) OR (tagged_topics:(119) OR tagged_about_sources:(119)
>> OR tagged_created_sources:(119)))) AND NOT ("intellectual property" OR
>> "plan testimonial")) AND ((((tags:"geo_morocco"^0.9 OR *:*) OR
>> (content_exact:"March Madness"^0.19999 OR
>> headline:"recognizes"^0.19999 OR headline:("holiday sale" OR "tech
>> deals" OR "Black Friday Sale" OR "Black Friday deals"~5 OR "Market
>> Analysis" OR wildfire OR arrested OR stabbed OR "celebrate birthday"~5
>> OR "market expected boom"~5 OR "what to expect" OR "where to
>> find")^0.199999999999 OR content_exact:"state championship
>> game"^0.19999 OR content_exact:"playstation 4"^0.1999999999999 OR
>> content_exact:"recover after shock"^0.19999 OR content_exact:"losing
>> streak"^0.19999 OR content_exact:"with win over"^0.19999 OR
>> headline:(content_exact:"Islamic state")^0.19999 OR
>> headline:("accident")^0.1999999999 OR
>> headline:(content_exact:"badgers")^0.19999 headline:("part time" OR
>> "full time" OR "accuweather" OR "snowstorm" OR PHOTOS)^0.199999999999
>> OR headline:(content_exact:"investor alert")^0.19999999999999 OR
>> headline:(content_exact:"stock")^0.19999999 OR
>> headline:(content_exact:"cuts holdings" OR content_exact:"raises
>> holdings" OR content_exact:"reduces holdings")^0.19999999 OR
>> headline:("ResearchAndMarkets.com")^0.19999 OR
>> headline:(content_exact:"conference")^0.19999 OR
>> headline:(content_exact:"of the year")^0.19999 OR
>> headline:(content_exact:"rankings")^0.19999 OR ("edged
>> higher")^0.1999999999999999 OR ("edged lower")^0.1999999999999999 OR
>> headline:(content_exact:"blue devils")^0.19999 OR
>> headline:(content_exact:"shares climb")^0.19999 OR
>> headline:(content_exact:"volunteer")^0.19999999 OR
>> headline:(content_exact:"murderer")^0.19999 OR
>> headline:(content_exact:"murdered")^0.19999 OR
>> headline:(content_exact:"hurricane")^0.19999 OR
>> headline:(content_exact:"tornado")^0.19999 OR
>> headline:(content_exact:"storm")^0.19999 OR
>> headline:(content_exact:"found dead")^0.19999 OR
>> headline:(content_exact:"celebrity")^0.19999999 OR
>> headline:(content_exact:"registration underway")^0.19 OR
>> headline:(content_exact:"boko haram")^0.19999999 OR
>> headline:(content_exact:"police arrest")^0.19999 OR "human
>> remains"^0.1999 OR "slaying"^0.1999 OR "home prices"^0.1999 OR
>> "transfer news"^0.1999 OR headline:("militia")^0.19999999 OR
>> (content_exact:"shooting")^0.19999 OR headline:("ISIS")^0.19999999 OR
>> headline:(content_exact:"prostitution")^0.19999999 OR
>> headline:(content_exact:"drugs")^0.19999 OR
>> content_exact:"winger"^0.19999999 OR "happy birthday"^0.19999 OR
>> "happy easter"^0.19999 OR "merry christmas"^0.19999 OR "reported at
>> trading volume"^0.199999 OR "most active stocks"^0.199999 OR "loss
>> narrows"^0.199999 OR "earnings conference"^0.199999 OR "put
>> options"^0.199999 OR "trading range"^0.199999 OR "week low"^0.199999
>> OR "week high"^0.199999 OR "neutral"^0.199999 OR "downgraded"^0.199999
>> OR "upgraded"^0.199999 OR "average rating"^0.199999 OR "financial
>> report"^0.19999999 OR "quarterly"^0.199999 OR "q1 loss"^0.19 OR "q3
>> loss"^0.19999999 OR "q4 loss"^0.19999999 OR "q2 loss"^0.19999999 OR
>> "financial results"^0.1999999 OR "upgrades"^0.19999999 OR
>> "upgraded"^0.19999 OR "downgrades"^0.19999 OR "downgraded"^0.19999 OR
>> "consensus estimate"^0.19999 OR "analyst estimate"^0.19999 OR
>> "consensus analyst estimate"^0.199999 OR "q1 results"^0.19999 OR "q2
>> results"^0.19999 OR "q3 results"^0.19999999 OR "q4 results"^0.19999 OR
>> content_exact:"EPS"^0.19999999 OR "fiscal results"^0.19999 OR
>> "financial results"^0.1999 OR "profits up"^0.19999999 OR "profit
>> down"^0.19999 OR "quarter report"^0.19999 OR "quarterly report"^0.19
>> OR "earnings"^0.19999 OR "quarterly results"^0.19999999 OR "earnings
>> report"^0.19999999 OR "quarterly earnings"^0.19999 OR
>> content_exact:"narrows"^0.19999 OR content_exact:"quarter
>> loss"^0.19999999 OR content_exact:"quarterly losses"^0.19999 OR
>> content_exact:"quarterly loss"^0.19999 OR content_exact:"quarter
>> results"^0.19999999 OR content_exact:"report of earnings"^0.19999999
>> OR "earnings release"^0.19999999 OR "research reports"^0.19999999 OR
>> "target raised"^0.19999999 OR "try any of our foolish"^0.19999999 OR
>> "jim cramer"^0.19999999 OR content_exact:"jumps"^0.19 OR
>> headline:(content_exact:"coverage")^0.1999999 OR headline:("rose
>> stock"~5)^0.1999999999 OR headline:("declined stock"~5)^0.1999999999
>> OR headline:("FOREX")^0.199999999 OR
>> content_exact:"unloads"^0.19999999 OR "shares drops"^0.19999999 OR
>> "research and markets"^0.19999999 OR headline:("price
>> target")^0.1999999999 OR headline:("early movers")^0.1999999999 OR
>> headline:("rating")^0.1999999999 OR headline:("stock")^0.1999999999 OR
>> headline:("stocks")^0.199999999 OR "U.S. stocks were lower"^0.1999999
>> OR headline:("slides")^0.199999999 OR headline:("wall st")^0.199999999
>> OR headline:("indexes")^0.199999999 OR headline:("financial
>> results")^0.1999999999999999 OR headline:("closing bell")^0.19 OR
>> headline:(content_exact:"higher volume")^0.1999 OR headline:("trading
>> lower")^0.1999 OR headline:(content_exact:"research and
>> markets")^0.1999999 OR (content_exact:"mid-day changers")^0.1999999 OR
>> (headline:"a share")^0.1999999 OR (headline:"insider
>> buying")^0.1999999 OR (headline:"short interest")^0.1999999 OR
>> (headline:"shares of")^0.1999999 OR (headline:"market
>> movers")^0.1999999 OR (headline:"analyst")^0.19999999999 OR
>> (headline:"analysts")^0.19999999999 OR (headline:"dow
>> spikes")^0.19999999999 OR (headline:"dow movers")^0.1999999 OR
>> (headline:"bidness")^0.1999999)) AND NOT ((headline:("market report"
>> OR "market by offering" OR "market segmentation"~6 OR "applications
>> forecast" OR "market tremendous growth"~8 OR "market significant
>> growth"~8 OR "market status" OR "forecast 2019"~4 OR "forecast 2020"~4
>> OR "forecast 2021"~4 OR "forecast 2022"~4 OR "forecast 2023"~4 OR
>> "forecast 2024"~4 OR "forecast 2025"~4 OR "forecast 2026"~4 OR
>> "forecast 2027"~4 OR "valuation reach"~4 OR "market grow during"~5 OR
>> "market survey report"~5 OR "holding cut by") OR headline:("investing
>> advise" OR "market to witness" OR "position decreased by" OR
>> "increases stake" OR "market study" OR "market size" OR "global
>> forecast" OR "stock analysts" OR "sentiment shift") OR
>> headline:("global industry") OR headline:("dow gains") OR
>> headline:("forecast industry"~5 OR "worldwide forecast"~7 OR "market
>> analysis"~5) OR headline:("researchandmarkets.com") OR
>> headline:("morning movers") OR headline:("markets now") OR
>> headline:("market trends"~5) OR headline:("market estimated valued"~9)
>> OR headline:("market projected to grow") OR headline:("market expected
>> to grow"~6) OR headline:("falls to low"~6) OR headline:("Zacks
>> investment research") OR headline:("SWOT analysis") OR "equal weight"
>> OR headline:("brokerage recommendations") OR headline:("ratings
>> outlook") OR headline:("financial stocks") OR headline:("equities
>> research") OR headline:("given average recommendation") OR
>> headline:("from analysts") OR headline:("target price") OR "Barclays
>> target price"~15 OR headline:("Consensus Recommendation") OR
>> headline:("Coverage initiated") OR headline:("Wall street opens
>> lower") OR headline:("Wall street pulls back") OR headline:("Wall
>> street advances") OR headline:("Wall street opens higher") OR
>> headline:("REPORTS ACQUISITION BY DIRECTOR") OR headline:("REPORTS
>> ACQUISITION BY Senior") OR headline:("REPORTS ACQUISITION BY VP") OR
>> headline:("REPORTS ACQUISITION BY executive") OR headline:("REPORTS
>> ACQUISITION BY CEO") headline:("cut sell"~3) OR headline:("lowered
>> sell"~3) OR headline:("PT lowered") OR headline:("cut neutral"~3) OR
>> headline:("lowered neutral"~3) OR headline:("cut hold"~3) OR
>> headline:("lowered hold"~3) OR headline:("hold rating"~3) OR
>> headline:("raised buy"~4) OR headline:("raised to") OR
>> headline:("lowered buy"~4) OR headline:("rating buy"~4) OR
>> headline:("rating add"~4) OR headline:("lowered underperform"~3) OR
>> headline:("outperform") OR headline:("downgraded by") OR
>> headline:("upgraded by") OR headline:("downgraded to") OR
>> headline:("upgraded to") OR headline:("announces dividend"~3) OR
>> headline:("plans dividend"~3) headline:("issues dividend"~3) OR
>> headline:("shares sold") OR headline:("shares bought") OR ("shares
>> reached high"~9) OR "research note issued to investors" OR "move per
>> share"~8) OR "apply now" OR "Undergraduate degree or equivalent"~6 OR
>> "your cv" OR "Add my CV to the" OR "We are currently looking for a" OR
>> "a competitive salary" OR headline:("roadshow" OR "terms of service
>> violation") OR headline:("best deals"~4 OR "thanksgiving travel"~4 OR
>> "thanksgiving guide"~4 OR "happy thanksgiving" OR "best of 2018"~5 OR
>> "black friday hours"~5 OR "black Friday freebies"~5 OR "stores open
>> thanksgiving"~5 OR "stores open christmas"~5 OR "cyber monday" OR
>> "black friday deal"~8 OR "thanksgiving dinner" OR santa OR "wedding
>> announcements" OR "holiday sales" OR "white nationalist" OR "shooting"
>> OR "mall shootings" OR "stabbing" OR "holiday gift" OR "family
>> killed"~7 OR "killed by car" OR "apply now" OR obituary OR "entry
>> level" OR "support worker" OR "a career within" OR "recipe" OR
>> "Exclusive opportunity" OR "content acquisition")))) AND NOT
>> ((feed_id:"101505" OR feed_id:"95622" OR feed_id:"104135" OR
>> feed_id:"95624" OR feed_id:"6537" OR feed_id:"104138" OR
>> feed_id:"104140" OR feed_id:"95629" OR feed_id:"92622" OR
>> feed_id:"104366" OR feed_id:"99342" OR feed_id:"82520" OR
>> feed_id:"94172" OR feed_id:"11967")) AND
>> ((tags:content_us^999999999999) OR *:*) AND (((tags:"news_major"^99)
>> OR feed_id:"108735"^99999999 OR feed_id:"68677"^99999999 OR
>> feed_id:"89672"^99999999 OR feed_id:"94600"^99999999 OR
>> feed_id:"95627"^99999999 OR feed_id:"11501"^99999999 OR
>> feed_id:"3470"^99999999 OR feed_id:"53326"^99999999 OR
>> feed_id:"42417"^99999999 OR feed_id:"43069"^99999999 OR
>> feed_id:"108734"^99999999 OR feed_id:"75797"^99999999 OR
>> feed_id:"107094"^99999999 OR feed_id:"48503"^99999999 OR
>> feed_id:"105598"^99999999 OR feed_id:"11675"^99999999 OR
>> feed_id:"28476"^99999999 OR feed_id:"57757"^99999999 OR
>> feed_id:"99741"^99999999 OR feed_id:"70591"^99999999) OR *:*)) /* None */
>>
>> Filter query parameters:
>>
>> (valid_firms:(0 OR 1) OR (*:* AND -valid_firms:[* TO *]))
>>
>> publication_type:(news OR blog OR press_release OR publication)
>>
>> lang:(en OR es)
>>
>> published_at:["2021-04-01T07:00:00Z" TO "2021-04-15T16:42:28.150394Z"]
>>
>> OLD cluster query time
>>
>> "*QTime*":1209,
>>
>> NEW cluster query time – almost twice as long
>>
>> "*QTime*":2316,
>>
>> Thank you in advance for any help you can provide.
>>
>> Logo Description automatically generated
>>
>> a MODERN GOVERNANCE company
>>
>> *Russell Bahr­­*
>>
>> /Lead Infrastructure Engineer/
>>
>> 543 NW York Drive | Suite 100 | Bend, OR 97703
>> Direct: 541-306-3271 | rbahr@manzama.com <ma...@manzama.com> |
>> www.manzama.com<http://www.manzama.com> <http://www.manzama.com<http://www.manzama.com>>
>>
> --
> Charlie Hull - Managing Consultant at OpenSource Connections Limited
> <www.o19s.com<http://www.o19s.com>>
> Founding member of The Search Network <https://thesearchnetwork.com/<https://thesearchnetwork.com>>
> and co-author of Searching the Enterprise
> <https://opensourceconnections.com/about-us/books-resources/<https://opensourceconnections.com/about-us/books-resources>>
> tel/fax: +44 (0)8700 118334
> mobile: +44 (0)7767 825828
>

-- 
Charlie Hull - Managing Consultant at OpenSource Connections Limited 
<www.o19s.com>
Founding member of The Search Network <https://thesearchnetwork.com/> 
and co-author of Searching the Enterprise 
<https://opensourceconnections.com/about-us/books-resources/>
tel/fax: +44 (0)8700 118334
mobile: +44 (0)7767 825828

Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

Posted by Russell Bahr <rb...@manzama.com>.
Hi Charlie and Alessandro,

Thank you for your responses, yes, it is a monster query, and unfortunately, this is one of our smaller and faster performing queries. We were able to run this in solr4.10.4 significantly faster than in solr6.5.1, and solr6.5.1 is as you see significantly faster than solr8.7.0.

Our application relies heavily on the grouping and ngroups as well as faceting and we have looked into other ways of getting the results that we get from those but it would be a major rewrite to try to get those in a different way and is not something we can try to do at this time.

I have gone through the configs and the schema and believe I have made the correct changes in those for the defaults that changed through the updated versions but am wondering if there is something that I missed, or configured incorrectly in there that could be contributing to the slowness.  Does anyone have any suggestions to try in the schema.xml or maybe in solrconfig.xml.

Thanks,
Russ


From: Charlie Hull <ch...@opensourceconnections.com>
Organization: OpenSource Connections
Reply-To: "users@solr.apache.org" <us...@solr.apache.org>
Date: Tuesday, April 20, 2021 at 6:40 AM
To: "users@solr.apache.org" <us...@solr.apache.org>
Subject: Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

Hi Russell,

Your complex Boolean query and the amount of new documents you're adding
every day remind me of the media monitoring applications I've seen for
Solr. The way these were made performant (for people like Bloomberg) was
to run them as a reverse search: e.g. to test each documents against a
set of stored queries, rather than running a set of queries over an
index. We built Luwak (now contributed as the Lucene Monitor) for this
very purpose. https://www.flax.co.uk/index.html@p=3058.html<https://www.flax.co.uk/index.html@p=3058.html> has a short
writeup.

As Alessandro has suggested you'll need to break down and figure out
which part of your big query is causing the performance issue, which may
lead you to a recent change in Solr, but I feel you also need to
consider whether your overall architecture is suitable for your use
case. I also wonder how maintainable your giant queries are and if
anyone really understands the interplay of the various boosts and
Booleans. If you've got lots of queries like this and if they're
something users can generate/modify at will that won't help either.

Best

Charlie

On 20/04/2021 00:37, Russell Bahr wrote:
>
> We are trying to upgrade our solr clusters and are running into
> performance issues when moving to the newer version. We are finding
> that queries are taking more than double the amount of time to return
> when provided with the same query and both clusters are indexed with
> the same documents. The queries that we run are using booting as well
> as groups and ngroups. Our original clusters were solr 4.10.4 and we
> experienced a similar degradation going from 4.10.4 to 6.5.1 and were
> able to get around that by splitting the work from one 30 server
> cluster to two clusters one with 30 servers and a second with 35
> clusters. It is not acceptable for us to more than double our clusters
> again. I have gone through the documentation and made changes to the
> schema and solr config as needed to upgrade but am still not sure why
> we are experiencing such a dramatic degradation in performance.
>
> We are indexing about 550000 new documents daily and updating around
> 550000 documents daily as well.
>
> The clusters are configured as follows with schema and configs and a
> sample query that I am running against both cluster examples.
>
> Old cluster:
> Solr 6.5.1
> 31 GB heap
> OpenJDK 64-Bit Server VM - 1.8.0_275-8u275-b01-1~deb9u1-b01
>
> Shards -6 Replicas -5
>
> /18643418 docs/
>
> /Avg size/doc: 2.6Kb/
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":2665,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*indent*":"on",
>
>       "*wt*":"json",
>
>       "*_*":"1618866411985"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18728759,
>
>       "*ngroups*":14295515,
>
>       "*groups*":[{
>
> …
>
>
>
> New cluster: - this query takes about *10* times as long.
> Solr 8.7.0
> 31 GB heap
> OpenJDK 64-Bit Server VM - 11.0.9.1+1-post-Debian-1deb10u2
>
> Shards -5 Replicas -5
> /18643418 docs/
>
> /Avg size/doc: 2.6Kb/
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":27876,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*wt*":"json",
>
>       "*_*":"1618866396857"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18730577,
>
>       "*ngroups*":13988977,
>
> …
>
> Solr 6.5.1
>
> solr 6.5.1 schema.xml
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="articles" version="1.5">
>     <uniqueKey>id</uniqueKey>
>     <defaultSearchField>text</defaultSearchField>
>     <solrQueryParser defaultOperator="AND" />
>
>     <fieldType name="string" class="solr.StrField"
> sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="boolean" class="solr.BoolField"
> sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="int" class="solr.TrieIntField" precisionStep="0"
> positionIncrementGap="0"/>
>     <fieldType name="float" class="solr.TrieFloatField"
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="long" class="solr.TrieLongField"
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="double" class="solr.TrieDoubleField"
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="date" class="solr.TrieDateField" omitNorms="true"
> precisionStep="6" positionIncrementGap="0"/>
>
> <!-- lowercases the entire field value, keeping it as a single token.  -->
> <fieldType name="lowercase" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer>
>             <tokenizer class="solr.KeywordTokenizerFactory"/>
>             <filter class="solr.LowerCaseFilterFactory" />
>         </analyzer>
>    </fieldType>
>
> <!-- Exact text, without word stemming -->
> <fieldType name="exact_text" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory"
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
> <!-- Exact text, case-sensitive, without word stemming -->
> <fieldType name="exact_text_and_case" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory"
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>         </analyzer>
>     </fieldType>
>
> <!-- Exact text (without word stemming) but normalized. Used for the
> headline field -->
> <fieldType name="exact_text_normalized" class="solr.TextField"
> positionIncrementGap="100" omitNorms="false">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory"
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
> <!-- The default (stemmed) text field for general queries -->
> <fieldType name="text" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory"
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory"
> language="English" />
>         </analyzer>
>         <analyzer type="query">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory"
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory"
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory"
> language="English" />
>         </analyzer>
>     </fieldType>
>
> <!-- General -->
> <field name="id" type="string" indexed="true" stored="true"
> multiValued="false" required="true" docValues="true"/>
>     <field name="django_ct" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="django_id" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="lang" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>
> <!-- Content -->
> <field name="headline" type="exact_text_normalized" indexed="true"
> stored="true" multiValued="false" />
> <!-- <field name="intro" type="text" indexed="true" stored="false"
> multiValued="false" /> -->
> <field name="intro" type="exact_text_normalized" indexed="true"
> stored="false" multiValued="false" />
>     <field name="text" type="text" indexed="true" stored="false"
> multiValued="false" />
>     <field name="content" type="text" indexed="false" stored="true"
> multiValued="false" />
>     <field name="content_fulltext" type="text" stored="false"
> indexed="true" multiValued="false" />
>     <field name="content_exact" type="exact_text" stored="false"
> indexed="true" multiValued="false" /> <!-- generated from `text` -->
> <field name="content_exact_case" type="exact_text_and_case"
> stored="false" indexed="true" multiValued="false" /> <!-- generated
> from `text` -->
>
>
>     <!-- Source Data -->
> <field name="published_at" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="publication_type" type="string" indexed="true"
> stored="true" multiValued="false" docValues="true" />
>     <field name="feed_id" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="subscription" type="int" indexed="true"
> stored="false" docValues="true" />
>     <field name="priority_fetch" type="boolean" indexed="true"
> stored="true" />
>
> <!-- Ranking -->
> <field name="priority" type="float" indexed="true" stored="false"
> multiValued="false" docValues="true" />
>     <field name="site_rank" type="long" indexed="true" stored="false"
> multiValued="false" docValues="true" />
>     <field name="combined_priority_weight" type="float" indexed="true"
> stored="true" multiValued="false" docValues="true" />
>     <field name="valid_firms" type="long" indexed="true"
> stored="false" multiValued="true" docValues="true" />
>
> <!-- Pre-Tagging of Saved Searches -->
> <field name="ss" type="long" indexed="true" stored="false"
> multiValued="true" docValues="true" />
>     <field name="tags" type="string" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="last_taggable_change" type="date" indexed="true"
> stored="true" multiValued="false" docValues="true" />
>     <field name="tagged_topics" type="long" indexed="true"
> stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_about_sources" type="long" indexed="true"
> stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_created_sources" type="long" indexed="true"
> stored="true" multiValued="true" docValues="true" />
>
> <!-- Event Specific -->
> <field name="end_date" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="start_date" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>
> <!-- Twitter specific -->
> <field name="tweeter" type="lowercase" indexed="true" stored="true"
> multiValued="false" />
>
> <!-- Functional -->
> <field name="fingerprint" type="string" stored="false" indexed="true"
> multiValued="false" docValues="true" />
>     <field name="_version_" type="long" indexed="true" stored="true"
> docValues="true" />
>
> <!-- Copy text into content_exact -->
> <copyField source="text" dest="content_exact" />
>     <copyField source="text" dest="content_exact_case" />
>
> <!-- Insights -->
> <field name="has_signal" type="int" indexed="true" stored="true"
> multiValued="false"
> docValues="true" />
>
> <!-- Industry Entities -->
> <field name="industry_tags" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>
> </schema>
>
> solr 6.5.1 solrconfig.xml
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <config>
>
>
> <luceneMatchVersion>6.5.1</luceneMatchVersion>
>
> <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
>   <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
>   <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
>   <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
>   <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
>
> <lib dir="/total/crap/dir/ignored" />
>
> <dataDir>${solr.data.dir:}</dataDir>
>
>   <schemaFactory class="ClassicIndexSchemaFactory"/>
>
> <directoryFactory name="DirectoryFactory"
> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>
> <indexConfig>
>
> </indexConfig>
>
> <jmx />
>
> <updateHandler class="solr.DirectUpdateHandler2">
>
> <autoCommit>
>        <maxTime>600000</maxTime>
>        <openSearcher>false</openSearcher>
>      </autoCommit>
>
> <autoSoftCommit>
>         <maxTime>120000</maxTime>
>       </autoSoftCommit>
>
>
> <updateLog>
>       <str name="dir">${solr.data.dir:}</str>
>     </updateLog>
>
>   </updateHandler>
>
> <query>
>
> <maxBooleanClauses>4096</maxBooleanClauses>
>
> <filterCache class="solr.LRUCache"
> size="3600"
> initialSize="128"
> autowarmCount="128"/>
>
> <queryResultCache class="solr.LRUCache"
> size="1024"
> initialSize="64"
> autowarmCount="64"/>
>
> <documentCache class="solr.LRUCache"
> size="4096"
> initialSize="128"
> autowarmCount="0"/>
>
> <enableLazyFieldLoading>true</enableLazyFieldLoading>
>
> <queryResultWindowSize>20</queryResultWindowSize>
>
> <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
>
> <listener event="newSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
> </arr>
>     </listener>
>     <listener event="firstSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>         <lst>
>           <str name="q">static firstSearcher warming in
> solrconfig.xml</str>
>         </lst>
>       </arr>
>     </listener>
>
> <useColdSearcher>true</useColdSearcher>
>
> <maxWarmingSearchers>4</maxWarmingSearchers>
>
>   </query>
>
> <requestDispatcher handleSelect="false" >
>
> <requestParsers enableRemoteStreaming="false"
> multipartUploadLimitInKB="2048000" />
>
> <httpCaching never304="true" />
>
> </requestDispatcher>
>
> <requestHandler name="/select" class="solr.SearchHandler">
> <lst name="defaults">
>        <str name="echoParams">explicit</str>
>        <int name="rows">10</int>
>        <str name="df">text</str>
>        <str name="group">true</str>
>        <str name="group.field">fingerprint</str>
>        <int name="group.limit">6</int>
>        <str name="group.ngroups">true</str>
>        <int name="f.feed_id.facet.mincount">1</int>
>        <int name="f.linked_searches.facet.mincount">1</int>
> <int name="timeAllowed">120000</int>
>      </lst>
>
> </requestHandler>
>
> <requestHandler name="/get" class="solr.RealTimeGetHandler">
>      <lst name="defaults">
>        <str name="omitHeader">true</str>
>        <str name="wt">json</str>
>        <str name="indent">true</str>
>      </lst>
>   </requestHandler>
>
> <requestHandler name="/export" class="solr.SearchHandler">
>     <lst name="invariants">
>       <str name="rq">{!xport}</str>
>       <str name="wt">xsort</str>
>       <str name="distrib">false</str>
>     </lst>
>
>     <arr name="components">
>       <str>query</str>
>     </arr>
>   </requestHandler>
>
> <requestHandler name="/update" class="solr.UpdateRequestHandler">
> </requestHandler>
>
> <requestHandler name="/update/extract"
> startup="lazy"
> class="solr.extraction.ExtractingRequestHandler" >
>     <lst name="defaults">
>       <str name="lowernames">true</str>
>       <str name="uprefix">ignored_</str>
>
> <!-- capture link hrefs but ignore div attributes -->
> <str name="captureAttr">true</str>
>       <str name="fmap.a">links</str>
>       <str name="fmap.div">ignored_</str>
>     </lst>
>   </requestHandler>
>
> <requestHandler name="/analysis/field"
> startup="lazy"
> class="solr.FieldAnalysisRequestHandler" />
>
> <requestHandler name="/analysis/document"
> class="solr.DocumentAnalysisRequestHandler"
> startup="lazy" />
>
> <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>     <lst name="invariants">
>       <str name="q">solrpingquery</str>
>     </lst>
>     <lst name="defaults">
>       <str name="echoParams">all</str>
>     </lst>
> </requestHandler>
>
> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>     <lst name="defaults">
>      <str name="echoParams">explicit</str>
>      <str name="echoHandler">true</str>
>     </lst>
>   </requestHandler>
>
> <requestHandler name="/replication" class="solr.ReplicationHandler"
> startup="lazy" />
>
> <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
>
>     <str name="queryAnalyzerFieldType">textSpell</str>
>
> <lst name="spellchecker">
>       <str name="name">default</str>
>       <str name="field">name</str>
>       <str name="classname">solr.DirectSolrSpellChecker</str>
> <str name="distanceMeasure">internal</str>
> <float name="accuracy">0.5</float>
> <int name="maxEdits">2</int>
> <int name="minPrefix">1</int>
> <int name="maxInspections">5</int>
> <int name="minQueryLength">4</int>
> <float name="maxQueryFrequency">0.01</float>
> </lst>
>
> <lst name="spellchecker">
>       <str name="name">wordbreak</str>
>       <str name="classname">solr.WordBreakSolrSpellChecker</str>
>       <str name="field">name</str>
>       <str name="combineWords">true</str>
>       <str name="breakWords">true</str>
>       <int name="maxChanges">10</int>
>     </lst>
>
> </searchComponent>
>
> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>
> <searchComponent name="clustering"
> enable="${solr.clustering.enabled:false}"
> class="solr.clustering.ClusteringComponent" >
> <lst name="engine">
> <str name="name">default</str>
> <str
> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
> <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
>     </lst>
>     <lst name="engine">
>       <str name="name">stc</str>
>       <str
> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>     </lst>
>   </searchComponent>
>
> <requestHandler name="/clustering"
> startup="lazy"
> enable="${solr.clustering.enabled:false}"
> class="solr.SearchHandler">
>     <lst name="defaults">
>       <bool name="clustering">true</bool>
>       <str name="clustering.engine">default</str>
>       <bool name="clustering.results">true</bool>
> <str name="carrot.title">name</str>
>       <str name="carrot.url">id</str>
> <str name="carrot.snippet">features</str>
> <bool name="carrot.produceSummary">true</bool>
> <bool name="carrot.outputSubClusters">false</bool>
>
>        <str name="defType">edismax</str>
>        <str name="qf">
> text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
> </str>
>        <str name="q.alt">*:*</str>
>        <str name="rows">10</str>
>        <str name="fl">*,score</str>
>     </lst>
>     <arr name="last-components">
>       <str>clustering</str>
>     </arr>
>   </requestHandler>
>
> <searchComponent name="terms" class="solr.TermsComponent"/>
>
> <searchComponent name="elevator" class="solr.QueryElevationComponent" >
> <str name="queryFieldType">string</str>
>     <str name="config-file">elevate.xml</str>
>   </searchComponent>
>
> <searchComponent class="solr.HighlightComponent" name="highlight">
>     <highlighting>
> <fragmenter name="gap"
> default="true"
> class="solr.highlight.GapFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">100</int>
>         </lst>
>       </fragmenter>
> <fragmenter name="regex"
> class="solr.highlight.RegexFragmenter">
>         <lst name="defaults">
> <int name="hl.fragsize">70</int>
> <float name="hl.regex.slop">0.5</float>
> <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
>         </lst>
>       </fragmenter>
>
> <formatter name="html"
> default="true"
> class="solr.highlight.HtmlFormatter">
>         <lst name="defaults">
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>           <str name="hl.simple.post"><![CDATA[</em>]]></str>
>         </lst>
>       </formatter>
>
> <encoder name="html"
> class="solr.highlight.HtmlEncoder" />
>
> <fragListBuilder name="simple"
> class="solr.highlight.SimpleFragListBuilder"/>
>
> <fragListBuilder name="single"
> class="solr.highlight.SingleFragListBuilder"/>
>
> <fragListBuilder name="weighted"
> default="true"
> class="solr.highlight.WeightedFragListBuilder"/>
>
> <fragmentsBuilder name="default"
> default="true"
> class="solr.highlight.ScoreOrderFragmentsBuilder">
> </fragmentsBuilder>
>
> <fragmentsBuilder name="colored"
> class="solr.highlight.ScoreOrderFragmentsBuilder">
>         <lst name="defaults">
>           <str name="hl.tag.pre"><![CDATA[
>                <b style="background:yellow">,<b
> style="background:lawgreen">,
>                <b style="background:aquamarine">,<b
> style="background:magenta">,
>                <b style="background:palegreen">,<b
> style="background:coral">,
>                <b style="background:wheat">,<b style="background:khaki">,
>                <b style="background:lime">,<b
> style="background:deepskyblue">]]></str>
>           <str name="hl.tag.post"><![CDATA[</b>]]></str>
>         </lst>
>       </fragmentsBuilder>
>
>       <boundaryScanner name="default"
> default="true"
> class="solr.highlight.SimpleBoundaryScanner">
>         <lst name="defaults">
>           <str name="hl.bs.maxScan">10</str>
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>         </lst>
>       </boundaryScanner>
>
>       <boundaryScanner name="breakIterator"
> class="solr.highlight.BreakIteratorBoundaryScanner">
>         <lst name="defaults">
> <str name="hl.bs.type">WORD</str>
> <str name="hl.bs.language">en</str>
>           <str name="hl.bs.country">US</str>
>         </lst>
>       </boundaryScanner>
>     </highlighting>
>   </searchComponent>
>
> <queryResponseWriter name="json" class="solr.JSONResponseWriter">
> <str name="content-type">text/plain; charset=UTF-8</str>
>   </queryResponseWriter>
>
> <queryResponseWriter name="velocity"
> class="solr.VelocityResponseWriter" startup="lazy"/>
>
> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>     <int name="xsltCacheLifetimeSeconds">5</int>
>   </queryResponseWriter>
>
>   <!-- Legacy config for the admin interface -->
> <admin>
>     <defaultQuery>*:*</defaultQuery>
>   </admin>
>
> </config>
>
> Solr 8.7.0
>
> solr 8.7.0 schema.xml
>
> <?xml version="1.0" encoding="UTF-8" ?> <schema name="articles"
> version="1.6">     <uniqueKey>id</uniqueKey> <!--Define default scorer
> --> <similarity class="solr.LegacyBM25SimilarityFactory"/>
> <!--Depricated in solr 8 -->
> <!--<defaultSearchField>text</defaultSearchField> -->
> <!--<solrQueryParser defaultOperator="AND" /> -->     <!--Define
> fieldTypes Trie* has been replaced by *PointField--> <fieldType
> name="string" class="solr.StrField" sortMissingLast="true"
> omitNorms="true"/>     <fieldType name="boolean"
> class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
> <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
>     <fieldType name="pfloat" class="solr.FloatPointField"
> docValues="true"/>    <fieldType name="plong"
> class="solr.LongPointField" docValues="true"/>     <fieldType
> name="pdouble" class="solr.DoublePointField" docValues="true" />
> <fieldType name="pdate" class="solr.DatePointField" omitNorms="true"
> docValues="true"/> <!-- lowercases the entire field value, keeping it
> as a single token.  --> <fieldType name="lowercase"
> class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer>             <tokenizer
> class="solr.KeywordTokenizerFactory"/>             <filter
> class="solr.LowerCaseFilterFactory" />         </analyzer>
> </fieldType> <!-- Exact text, without word stemming --> <fieldType
> name="exact_text" class="solr.TextField" positionIncrementGap="100"
> omitNorms="true">         <analyzer type="index">
> <tokenizer class="solr.WhitespaceTokenizerFactory"/>
> <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0" catenateWords="1"
> catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />        <filter class="solr.FlattenGraphFilterFactory"/>
> <filter class="solr.LowerCaseFilterFactory"/>         </analyzer>
> <analyzer type="query">      <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />             <filter
> class="solr.LowerCaseFilterFactory"/>         </analyzer>
> </fieldType> <!-- Exact text, case-sensitive, without word stemming
> --> <fieldType name="exact_text_and_case" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">         <analyzer
> type="index">             <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />        <filter
> class="solr.FlattenGraphFilterFactory"/>         </analyzer>
> <analyzer type="query">      <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />         </analyzer>
>     </fieldType> <!-- Exact text (without word stemming) but
> normalized. Used for the headline field --> <fieldType
> name="exact_text_normalized" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">         <analyzer
> type="index">             <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />        <filter
> class="solr.FlattenGraphFilterFactory"/>             <filter
> class="solr.LowerCaseFilterFactory"/>         </analyzer>    <analyzer
> type="query">      <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />             <filter
> class="solr.LowerCaseFilterFactory"/>         </analyzer>
> </fieldType> <!-- The default (stemmed) text field for general queries
> --> <fieldType name="text" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">         <analyzer
> type="index">             <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />        <filter
> class="solr.FlattenGraphFilterFactory"/>             <filter
> class="solr.LowerCaseFilterFactory"/>             <filter
> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory"
> language="English" />         </analyzer>         <analyzer
> type="query">             <tokenizer
> class="solr.WhitespaceTokenizerFactory"/>            <filter
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>             <filter
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1"
> generateNumberParts="0" catenateWords="1" catenateNumbers="1"
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0"
> splitOnCaseChange="0" types="content-types.txt" />             <filter
> class="solr.LowerCaseFilterFactory"/>             <filter
> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory"
> language="English" />         </analyzer>     </fieldType> <!--
> General --> <field name="id" type="string" indexed="true"
> stored="true" multiValued="false" required="true" docValues="true"/>
>     <field name="django_ct" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />     <field name="django_id"
> type="string" indexed="true" stored="true" multiValued="false"
> docValues="true" />     <field name="lang" type="string"
> indexed="true" stored="true" multiValued="false" docValues="true" />
> <!-- Content --> <field name="headline" type="exact_text_normalized"
> indexed="true" stored="true" multiValued="false" /> <!-- <field
> name="intro" type="text" indexed="true" stored="false"
> multiValued="false" /> --> <field name="intro"
> type="exact_text_normalized" indexed="true" stored="false"
> multiValued="false" />     <field name="text" type="text"
> indexed="true" stored="false" multiValued="false" />     <field
> name="content" type="text" indexed="false" stored="true"
> multiValued="false" />     <field name="content_fulltext" type="text"
> stored="false" indexed="true" multiValued="false" />     <field
> name="content_exact" type="exact_text" stored="false" indexed="true"
> multiValued="false" /> <!-- generated from `text` --> <field
> name="content_exact_case" type="exact_text_and_case" stored="false"
> indexed="true" multiValued="false" /> <!-- generated from `text` -->
>     <!-- Source Data --> <field name="published_at" type="pdate"
> indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="publication_type" type="string" indexed="true"
> stored="true" multiValued="false" docValues="true" />     <field
> name="feed_id" type="plong" indexed="true" stored="true"
> multiValued="true" docValues="true" />     <field name="subscription"
> type="pint" indexed="true" stored="false" docValues="true" />
> <field name="priority_fetch" type="boolean" indexed="true"
> stored="true" /> <!-- Ranking --> <field name="priority" type="pfloat"
> indexed="true" stored="false" multiValued="false" docValues="true" />
>     <field name="site_rank" type="plong" indexed="true" stored="false"
> multiValued="false" docValues="true" />     <field
> name="combined_priority_weight" type="pfloat" indexed="true"
> stored="true" multiValued="false" docValues="true" />     <field
> name="valid_firms" type="plong" indexed="true" stored="false"
> multiValued="true" docValues="true" /> <!-- Pre-Tagging of Saved
> Searches --> <field name="ss" type="plong" indexed="true"
> stored="false" multiValued="true" docValues="true" />     <field
> name="tags" type="string" indexed="true" stored="true"
> multiValued="true" docValues="true" />     <field
> name="last_taggable_change" type="pdate" indexed="true" stored="true"
> multiValued="false" docValues="true" />     <field
> name="tagged_topics" type="plong" indexed="true" stored="true"
> multiValued="true" docValues="true" />     <field
> name="tagged_about_sources" type="plong" indexed="true" stored="true"
> multiValued="true" docValues="true" />     <field
> name="tagged_created_sources" type="plong" indexed="true"
> stored="true" multiValued="true" docValues="true" /> <!-- Event
> Specific --> <field name="end_date" type="pdate" indexed="true"
> stored="true" multiValued="false" docValues="true" />     <field
> name="start_date" type="pdate" indexed="true" stored="true"
> multiValued="false" docValues="true" /> <!-- Twitter specific -->
> <field name="tweeter" type="lowercase" indexed="true" stored="true"
> multiValued="false" /> <!-- Functional --> <field name="fingerprint"
> type="string" stored="false" indexed="true" multiValued="false"
> docValues="true" />     <field name="_version_" type="plong"
> indexed="true" stored="true" docValues="true" /> <!-- Copy text into
> content_exact --> <copyField source="text" dest="content_exact" />
> <copyField source="text" dest="content_exact_case" /> <!-- Insights
> --> <field name="has_signal" type="pint" indexed="true" stored="true"
> multiValued="false" docValues="true" /> <!-- Industry Entities -->
> <field name="industry_tags" type="plong" indexed="true" stored="true"
> multiValued="true" docValues="true" /> </schema>
>
> solr 8.7.0 solrconfig.xml
>
> <?xml version="1.0" encoding="UTF-8" ?> <config>
> <luceneMatchVersion>8.7.0</luceneMatchVersion> <lib
> dir="${solr.install.dir:../../../..}/contrib/extraction/lib"
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
> regex="solr-cell-\d.*\.jar" />   <lib
> dir="${solr.install.dir:../../../..}/contrib/clustering/lib/"
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
> regex="solr-clustering-\d.*\.jar" />   <lib
> dir="${solr.install.dir:../../../..}/contrib/langid/lib/"
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
> regex="solr-langid-\d.*\.jar" />   <lib
> dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar"
> />   <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib"
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/"
> regex="solr-velocity-\d.*\.jar" />
> <dataDir>${solr.data.dir:}</dataDir> <directoryFactory
> name="DirectoryFactory"
> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>       <schemaFactory class="ClassicIndexSchemaFactory">
> </schemaFactory> <codecFactory class="solr.SchemaCodecFactory"/>
> <indexConfig> <mergePolicyFactory
> class="org.apache.solr.index.TieredMergePolicyFactory">           <int
> name="maxMergeAtOnce">10</int>           <int
> name="segmentsPerTier">2</int>           <double
> name="noCFSRatio">0.1</double>         </mergePolicyFactory>
> <lockType>${solr.lock.type:native}</lockType> </indexConfig>
> <jmx />
> <updateHandler class="solr.DirectUpdateHandler2">
> <updateLog>       <str name="dir">${solr.ulog.dir:}</str>       <int
> name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
>     </updateLog> <autoCommit>        <maxTime>600000</maxTime>
> <maxDocs>1000000</maxDocs>        <openSearcher>false</openSearcher>
>      </autoCommit>
> <autoSoftCommit>         <maxTime>120000</maxTime>
> </autoSoftCommit> </updateHandler>
> <query>
> <maxBooleanClauses>4096</maxBooleanClauses>
> <slowQueryThresholdMillis>100000</slowQueryThresholdMillis>
> <filterCache class="solr.CaffeineCache" size="3600" initialSize="2048"
> autowarmCount="2048"/>
> <queryResultCache class="solr.CaffeineCache" size="1024"
> initialSize="512" autowarmCount="512"/> <documentCache
> class="solr.CaffeineCache" size="4096" initialSize="1024"
> autowarmCount="1024"/> <cache name="perSegFilter"
> class="solr.CaffeineCache" size="10" initialSize="0"
> autowarmCount="10" regenerator="solr.NoOpRegenerator" />
> <enableLazyFieldLoading>true</enableLazyFieldLoading>
> <queryResultWindowSize>20</queryResultWindowSize>
> <queryResultMaxDocsCached>200</queryResultMaxDocsCached> <listener
> event="newSearcher" class="solr.QuerySenderListener">       <arr
> name="queries"> </arr>     </listener>     <listener
> event="firstSearcher" class="solr.QuerySenderListener">       <arr
> name="queries">         <lst>           <str name="q">static
> firstSearcher warming in solrconfig.xml</str>         </lst>
> </arr>     </listener> <useColdSearcher>true</useColdSearcher>
> <maxWarmingSearchers>4</maxWarmingSearchers>   </query>
> <requestDispatcher>
> <requestParsers enableRemoteStreaming="false"
> multipartUploadLimitInKB="2048000" />
> <httpCaching never304="true" />
> </requestDispatcher> <requestHandler name="/select"
> class="solr.SearchHandler"> <lst name="defaults">        <str
> name="echoParams">explicit</str>        <int name="rows">10</int>
>        <str name="df">text</str>        <str name="q.op">AND</str>
>        <str name="group">true</str>        <str
> name="group.field">fingerprint</str>        <int
> name="group.limit">6</int>        <str name="group.ngroups">true</str>
>        <int name="f.feed_id.facet.mincount">1</int>        <int
> name="f.linked_searches.facet.mincount">1</int> <int
> name="timeAllowed">120000</int> </lst>
> </requestHandler> <requestHandler name="/get"
> class="solr.RealTimeGetHandler">      <lst name="defaults">
> <str name="omitHeader">true</str>        <str name="wt">json</str>
>        <str name="indent">true</str>      </lst>   </requestHandler>
> <requestHandler name="/export" class="solr.SearchHandler">     <lst
> name="invariants">       <str name="rq">{!xport}</str>       <str
> name="wt">xsort</str>       <str name="distrib">false</str>     </lst>
>     <arr name="components">       <str>query</str>     </arr>
> </requestHandler> <requestHandler name="/update"
> class="solr.UpdateRequestHandler"> </requestHandler> <requestHandler
> name="/update/extract" startup="lazy"
> class="solr.extraction.ExtractingRequestHandler" >     <lst
> name="defaults">       <str name="lowernames">true</str>       <str
> name="uprefix">ignored_</str> <str name="captureAttr">true</str>
>  <str name="fmap.a">links</str>       <str
> name="fmap.div">ignored_</str>     </lst>   </requestHandler>
> <requestHandler name="/analysis/field" startup="lazy"
> class="solr.FieldAnalysisRequestHandler" />   <requestHandler
> name="/analysis/document" class="solr.DocumentAnalysisRequestHandler"
> startup="lazy" />
> <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>     <lst name="invariants">       <str name="q">solrpingquery</str>
>     </lst>     <lst name="defaults">       <str
> name="echoParams">all</str>     </lst> </requestHandler>
> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>     <lst name="defaults">      <str name="echoParams">explicit</str>
>      <str name="echoHandler">true</str>     </lst>   </requestHandler>
> <requestHandler name="/replication" class="solr.ReplicationHandler"
> startup="lazy" /> <searchComponent name="spellcheck"
> class="solr.SpellCheckComponent">     <str
> name="queryAnalyzerFieldType">textSpell</str> <lst
> name="spellchecker">       <str name="name">default</str>       <str
> name="field">name</str>       <str
> name="classname">solr.DirectSolrSpellChecker</str> <str
> name="distanceMeasure">internal</str> <float
> name="accuracy">0.5</float> <int name="maxEdits">2</int> <int
> name="minPrefix">1</int> <int name="maxInspections">5</int> <int
> name="minQueryLength">4</int> <float
> name="maxQueryFrequency">0.01</float> </lst> <lst name="spellchecker">
>       <str name="name">wordbreak</str>       <str
> name="classname">solr.WordBreakSolrSpellChecker</str>       <str
> name="field">name</str>       <str name="combineWords">true</str>
>       <str name="breakWords">true</str>       <int
> name="maxChanges">10</int>     </lst> </searchComponent>
> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
> <searchComponent name="clustering"
> enable="${solr.clustering.enabled:false}"
> class="solr.clustering.ClusteringComponent" > <lst name="engine"> <str
> name="name">default</str> <str
> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str> <str
> name="MultilingualClustering.defaultLanguage">ENGLISH</str>     </lst>
>     <lst name="engine">       <str name="name">stc</str>       <str
> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>     </lst>   </searchComponent> <requestHandler name="/clustering"
> startup="lazy" enable="${solr.clustering.enabled:false}"
> class="solr.SearchHandler">     <lst name="defaults">       <bool
> name="clustering">true</bool>       <str
> name="clustering.engine">default</str>       <bool
> name="clustering.results">true</bool> <str
> name="carrot.title">name</str>       <str name="carrot.url">id</str>
> <str name="carrot.snippet">features</str> <bool
> name="carrot.produceSummary">true</bool> <bool
> name="carrot.outputSubClusters">false</bool>        <str
> name="defType">edismax</str>        <str name="qf"> text^0.5
> features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 </str>
> <str name="q.alt">*:*</str>        <str name="rows">10</str>
> <str name="fl">*,score</str>     </lst>     <arr
> name="last-components">       <str>clustering</str>     </arr>
> </requestHandler>
> <searchComponent name="terms" class="solr.TermsComponent"/>
> <searchComponent name="elevator" class="solr.QueryElevationComponent"
> > <str name="queryFieldType">string</str>     <str
> name="config-file">elevate.xml</str>   </searchComponent>
> <searchComponent class="solr.HighlightComponent" name="highlight">
> <highlighting> <fragmenter name="gap" default="true"
> class="solr.highlight.GapFragmenter">         <lst name="defaults">
>           <int name="hl.fragsize">100</int>         </lst>
> </fragmenter> <fragmenter name="regex"
> class="solr.highlight.RegexFragmenter">         <lst name="defaults">
> <int name="hl.fragsize">70</int> <float
> name="hl.regex.slop">0.5</float> <str name="hl.regex.pattern">[-\w
> ,/\n\&quot;&apos;]{20,200}</str>         </lst>       </fragmenter>
> <formatter name="html" default="true"
> class="solr.highlight.HtmlFormatter">         <lst name="defaults">
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>
> <str name="hl.simple.post"><![CDATA[</em>]]></str>         </lst>
>       </formatter> <encoder name="html"
> class="solr.highlight.HtmlEncoder" /> <fragListBuilder name="simple"
> class="solr.highlight.SimpleFragListBuilder"/> <fragListBuilder
> name="single" class="solr.highlight.SingleFragListBuilder"/>
> <fragListBuilder name="weighted" default="true"
> class="solr.highlight.WeightedFragListBuilder"/> <fragmentsBuilder
> name="default" default="true"
> class="solr.highlight.ScoreOrderFragmentsBuilder"> </fragmentsBuilder>
> <fragmentsBuilder name="colored"
> class="solr.highlight.ScoreOrderFragmentsBuilder">         <lst
> name="defaults">           <str name="hl.tag.pre"><![CDATA[
>                <b style="background:yellow">,<b
> style="background:lawgreen">,                <b
> style="background:aquamarine">,<b style="background:magenta">,
>                <b style="background:palegreen">,<b
> style="background:coral">,                <b
> style="background:wheat">,<b style="background:khaki">,
> <b style="background:lime">,<b
> style="background:deepskyblue">]]></str>           <str
> name="hl.tag.post"><![CDATA[</b>]]></str>         </lst>
> </fragmentsBuilder>       <boundaryScanner name="default"
> default="true" class="solr.highlight.SimpleBoundaryScanner">
> <lst name="defaults">           <str name="hl.bs.maxScan">10</str>
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
> </lst>       </boundaryScanner>       <boundaryScanner
> name="breakIterator"
> class="solr.highlight.BreakIteratorBoundaryScanner">         <lst
> name="defaults"> <str name="hl.bs.type">WORD</str> <str
> name="hl.bs.language">en</str>           <str
> name="hl.bs.country">US</str>         </lst>       </boundaryScanner>
>     </highlighting>   </searchComponent> <queryResponseWriter
> name="json" class="solr.JSONResponseWriter"> <str
> name="content-type">text/plain; charset=UTF-8</str>
> </queryResponseWriter>
> <queryResponseWriter name="velocity"
> class="solr.VelocityResponseWriter" startup="lazy"/>
> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
> <int name="xsltCacheLifetimeSeconds">5</int>   </queryResponseWriter>
> <admin>     <defaultQuery>*:*</defaultQuery>   </admin> </config>
>
> Solr Query examples.
>
> *:*
>
> {!boost
> b=sum(product(99999999999,has_signal),product(pow(priority,10),pow(recip(abs(ms(NOW/HOUR,published_at)),2.77e-09,1,1),5)))}((tags:Real_Est
> OR (((headline:"real estate"^99999999999 OR headline:"commercial
> development"^99999999999 OR headline:"commercial
> developer"^99999999999 OR "Real Estate" OR "Real Property" OR
> "property law" OR "Property Deal" OR "Property Sale" OR "purchase of
> land" OR "Homeowners Association" OR content_exact:"HOA" OR "Board of
> Realtors" OR content_exact:"Property Development" OR "CAP Rate" OR
> content_exact:"Housing Demand" OR "CRE Finance Council" OR "Housing
> Supply" OR "Property Tax" OR content_exact:"FHA" OR
> content_exact:"Fully Leased" OR content_exact:"Represented the Buyer"
> OR content_exact:"Design/Build" OR "Ad Valorem" OR "Anchor Tenant" OR
> "Build to suit" OR "Certificate of Occupancy" OR "Eminent Domain" OR
> "new office building" OR "new office development" OR "Adverse
> possession" OR "Allodial title" OR "planning law" OR "planning
> permission" OR "housebuilder" OR "housebiilding" OR
> content_exact:"housebuilder" OR "Fee Simple" OR "Fee tail" OR "Quiet
> Title" OR "Restraint on alienation" OR "Rule in Shelley" OR "Doctrine
> of worthier title" OR "Worthier Title Doctrine" OR
> content_exact:"Easement" OR "Equitable servitude")) OR
> ((tagged_topics:(27) OR tagged_about_sources:(27) OR
> tagged_created_sources:(27)) OR (tagged_topics:(107263) OR
> tagged_about_sources:(107263) OR tagged_created_sources:(107263)) OR
> (((content_exact:"Office Building" OR "Office Complex" OR "Office
> Tower" OR "Office Space" OR "Office Center" OR "Office Campus" OR
> "Class A Office" OR "Class B Office" OR "Class C Office" OR
> content_exact:"Class A Building" OR content_exact:"Class B Building"
> OR content_exact:"Class C Building" OR content_exact:"Class A Tower"
> OR content_exact:"Class B Tower" OR content_exact:"Class C Tower" OR
> content_exact:"corporate office" OR "office property" OR "office
> properties"))) OR (tagged_topics:(119) OR tagged_about_sources:(119)
> OR tagged_created_sources:(119)))) AND NOT ("intellectual property" OR
> "plan testimonial")) AND ((((tags:"geo_morocco"^0.9 OR *:*) OR
> (content_exact:"March Madness"^0.19999 OR
> headline:"recognizes"^0.19999 OR headline:("holiday sale" OR "tech
> deals" OR "Black Friday Sale" OR "Black Friday deals"~5 OR "Market
> Analysis" OR wildfire OR arrested OR stabbed OR "celebrate birthday"~5
> OR "market expected boom"~5 OR "what to expect" OR "where to
> find")^0.199999999999 OR content_exact:"state championship
> game"^0.19999 OR content_exact:"playstation 4"^0.1999999999999 OR
> content_exact:"recover after shock"^0.19999 OR content_exact:"losing
> streak"^0.19999 OR content_exact:"with win over"^0.19999 OR
> headline:(content_exact:"Islamic state")^0.19999 OR
> headline:("accident")^0.1999999999 OR
> headline:(content_exact:"badgers")^0.19999 headline:("part time" OR
> "full time" OR "accuweather" OR "snowstorm" OR PHOTOS)^0.199999999999
> OR headline:(content_exact:"investor alert")^0.19999999999999 OR
> headline:(content_exact:"stock")^0.19999999 OR
> headline:(content_exact:"cuts holdings" OR content_exact:"raises
> holdings" OR content_exact:"reduces holdings")^0.19999999 OR
> headline:("ResearchAndMarkets.com")^0.19999 OR
> headline:(content_exact:"conference")^0.19999 OR
> headline:(content_exact:"of the year")^0.19999 OR
> headline:(content_exact:"rankings")^0.19999 OR ("edged
> higher")^0.1999999999999999 OR ("edged lower")^0.1999999999999999 OR
> headline:(content_exact:"blue devils")^0.19999 OR
> headline:(content_exact:"shares climb")^0.19999 OR
> headline:(content_exact:"volunteer")^0.19999999 OR
> headline:(content_exact:"murderer")^0.19999 OR
> headline:(content_exact:"murdered")^0.19999 OR
> headline:(content_exact:"hurricane")^0.19999 OR
> headline:(content_exact:"tornado")^0.19999 OR
> headline:(content_exact:"storm")^0.19999 OR
> headline:(content_exact:"found dead")^0.19999 OR
> headline:(content_exact:"celebrity")^0.19999999 OR
> headline:(content_exact:"registration underway")^0.19 OR
> headline:(content_exact:"boko haram")^0.19999999 OR
> headline:(content_exact:"police arrest")^0.19999 OR "human
> remains"^0.1999 OR "slaying"^0.1999 OR "home prices"^0.1999 OR
> "transfer news"^0.1999 OR headline:("militia")^0.19999999 OR
> (content_exact:"shooting")^0.19999 OR headline:("ISIS")^0.19999999 OR
> headline:(content_exact:"prostitution")^0.19999999 OR
> headline:(content_exact:"drugs")^0.19999 OR
> content_exact:"winger"^0.19999999 OR "happy birthday"^0.19999 OR
> "happy easter"^0.19999 OR "merry christmas"^0.19999 OR "reported at
> trading volume"^0.199999 OR "most active stocks"^0.199999 OR "loss
> narrows"^0.199999 OR "earnings conference"^0.199999 OR "put
> options"^0.199999 OR "trading range"^0.199999 OR "week low"^0.199999
> OR "week high"^0.199999 OR "neutral"^0.199999 OR "downgraded"^0.199999
> OR "upgraded"^0.199999 OR "average rating"^0.199999 OR "financial
> report"^0.19999999 OR "quarterly"^0.199999 OR "q1 loss"^0.19 OR "q3
> loss"^0.19999999 OR "q4 loss"^0.19999999 OR "q2 loss"^0.19999999 OR
> "financial results"^0.1999999 OR "upgrades"^0.19999999 OR
> "upgraded"^0.19999 OR "downgrades"^0.19999 OR "downgraded"^0.19999 OR
> "consensus estimate"^0.19999 OR "analyst estimate"^0.19999 OR
> "consensus analyst estimate"^0.199999 OR "q1 results"^0.19999 OR "q2
> results"^0.19999 OR "q3 results"^0.19999999 OR "q4 results"^0.19999 OR
> content_exact:"EPS"^0.19999999 OR "fiscal results"^0.19999 OR
> "financial results"^0.1999 OR "profits up"^0.19999999 OR "profit
> down"^0.19999 OR "quarter report"^0.19999 OR "quarterly report"^0.19
> OR "earnings"^0.19999 OR "quarterly results"^0.19999999 OR "earnings
> report"^0.19999999 OR "quarterly earnings"^0.19999 OR
> content_exact:"narrows"^0.19999 OR content_exact:"quarter
> loss"^0.19999999 OR content_exact:"quarterly losses"^0.19999 OR
> content_exact:"quarterly loss"^0.19999 OR content_exact:"quarter
> results"^0.19999999 OR content_exact:"report of earnings"^0.19999999
> OR "earnings release"^0.19999999 OR "research reports"^0.19999999 OR
> "target raised"^0.19999999 OR "try any of our foolish"^0.19999999 OR
> "jim cramer"^0.19999999 OR content_exact:"jumps"^0.19 OR
> headline:(content_exact:"coverage")^0.1999999 OR headline:("rose
> stock"~5)^0.1999999999 OR headline:("declined stock"~5)^0.1999999999
> OR headline:("FOREX")^0.199999999 OR
> content_exact:"unloads"^0.19999999 OR "shares drops"^0.19999999 OR
> "research and markets"^0.19999999 OR headline:("price
> target")^0.1999999999 OR headline:("early movers")^0.1999999999 OR
> headline:("rating")^0.1999999999 OR headline:("stock")^0.1999999999 OR
> headline:("stocks")^0.199999999 OR "U.S. stocks were lower"^0.1999999
> OR headline:("slides")^0.199999999 OR headline:("wall st")^0.199999999
> OR headline:("indexes")^0.199999999 OR headline:("financial
> results")^0.1999999999999999 OR headline:("closing bell")^0.19 OR
> headline:(content_exact:"higher volume")^0.1999 OR headline:("trading
> lower")^0.1999 OR headline:(content_exact:"research and
> markets")^0.1999999 OR (content_exact:"mid-day changers")^0.1999999 OR
> (headline:"a share")^0.1999999 OR (headline:"insider
> buying")^0.1999999 OR (headline:"short interest")^0.1999999 OR
> (headline:"shares of")^0.1999999 OR (headline:"market
> movers")^0.1999999 OR (headline:"analyst")^0.19999999999 OR
> (headline:"analysts")^0.19999999999 OR (headline:"dow
> spikes")^0.19999999999 OR (headline:"dow movers")^0.1999999 OR
> (headline:"bidness")^0.1999999)) AND NOT ((headline:("market report"
> OR "market by offering" OR "market segmentation"~6 OR "applications
> forecast" OR "market tremendous growth"~8 OR "market significant
> growth"~8 OR "market status" OR "forecast 2019"~4 OR "forecast 2020"~4
> OR "forecast 2021"~4 OR "forecast 2022"~4 OR "forecast 2023"~4 OR
> "forecast 2024"~4 OR "forecast 2025"~4 OR "forecast 2026"~4 OR
> "forecast 2027"~4 OR "valuation reach"~4 OR "market grow during"~5 OR
> "market survey report"~5 OR "holding cut by") OR headline:("investing
> advise" OR "market to witness" OR "position decreased by" OR
> "increases stake" OR "market study" OR "market size" OR "global
> forecast" OR "stock analysts" OR "sentiment shift") OR
> headline:("global industry") OR headline:("dow gains") OR
> headline:("forecast industry"~5 OR "worldwide forecast"~7 OR "market
> analysis"~5) OR headline:("researchandmarkets.com") OR
> headline:("morning movers") OR headline:("markets now") OR
> headline:("market trends"~5) OR headline:("market estimated valued"~9)
> OR headline:("market projected to grow") OR headline:("market expected
> to grow"~6) OR headline:("falls to low"~6) OR headline:("Zacks
> investment research") OR headline:("SWOT analysis") OR "equal weight"
> OR headline:("brokerage recommendations") OR headline:("ratings
> outlook") OR headline:("financial stocks") OR headline:("equities
> research") OR headline:("given average recommendation") OR
> headline:("from analysts") OR headline:("target price") OR "Barclays
> target price"~15 OR headline:("Consensus Recommendation") OR
> headline:("Coverage initiated") OR headline:("Wall street opens
> lower") OR headline:("Wall street pulls back") OR headline:("Wall
> street advances") OR headline:("Wall street opens higher") OR
> headline:("REPORTS ACQUISITION BY DIRECTOR") OR headline:("REPORTS
> ACQUISITION BY Senior") OR headline:("REPORTS ACQUISITION BY VP") OR
> headline:("REPORTS ACQUISITION BY executive") OR headline:("REPORTS
> ACQUISITION BY CEO") headline:("cut sell"~3) OR headline:("lowered
> sell"~3) OR headline:("PT lowered") OR headline:("cut neutral"~3) OR
> headline:("lowered neutral"~3) OR headline:("cut hold"~3) OR
> headline:("lowered hold"~3) OR headline:("hold rating"~3) OR
> headline:("raised buy"~4) OR headline:("raised to") OR
> headline:("lowered buy"~4) OR headline:("rating buy"~4) OR
> headline:("rating add"~4) OR headline:("lowered underperform"~3) OR
> headline:("outperform") OR headline:("downgraded by") OR
> headline:("upgraded by") OR headline:("downgraded to") OR
> headline:("upgraded to") OR headline:("announces dividend"~3) OR
> headline:("plans dividend"~3) headline:("issues dividend"~3) OR
> headline:("shares sold") OR headline:("shares bought") OR ("shares
> reached high"~9) OR "research note issued to investors" OR "move per
> share"~8) OR "apply now" OR "Undergraduate degree or equivalent"~6 OR
> "your cv" OR "Add my CV to the" OR "We are currently looking for a" OR
> "a competitive salary" OR headline:("roadshow" OR "terms of service
> violation") OR headline:("best deals"~4 OR "thanksgiving travel"~4 OR
> "thanksgiving guide"~4 OR "happy thanksgiving" OR "best of 2018"~5 OR
> "black friday hours"~5 OR "black Friday freebies"~5 OR "stores open
> thanksgiving"~5 OR "stores open christmas"~5 OR "cyber monday" OR
> "black friday deal"~8 OR "thanksgiving dinner" OR santa OR "wedding
> announcements" OR "holiday sales" OR "white nationalist" OR "shooting"
> OR "mall shootings" OR "stabbing" OR "holiday gift" OR "family
> killed"~7 OR "killed by car" OR "apply now" OR obituary OR "entry
> level" OR "support worker" OR "a career within" OR "recipe" OR
> "Exclusive opportunity" OR "content acquisition")))) AND NOT
> ((feed_id:"101505" OR feed_id:"95622" OR feed_id:"104135" OR
> feed_id:"95624" OR feed_id:"6537" OR feed_id:"104138" OR
> feed_id:"104140" OR feed_id:"95629" OR feed_id:"92622" OR
> feed_id:"104366" OR feed_id:"99342" OR feed_id:"82520" OR
> feed_id:"94172" OR feed_id:"11967")) AND
> ((tags:content_us^999999999999) OR *:*) AND (((tags:"news_major"^99)
> OR feed_id:"108735"^99999999 OR feed_id:"68677"^99999999 OR
> feed_id:"89672"^99999999 OR feed_id:"94600"^99999999 OR
> feed_id:"95627"^99999999 OR feed_id:"11501"^99999999 OR
> feed_id:"3470"^99999999 OR feed_id:"53326"^99999999 OR
> feed_id:"42417"^99999999 OR feed_id:"43069"^99999999 OR
> feed_id:"108734"^99999999 OR feed_id:"75797"^99999999 OR
> feed_id:"107094"^99999999 OR feed_id:"48503"^99999999 OR
> feed_id:"105598"^99999999 OR feed_id:"11675"^99999999 OR
> feed_id:"28476"^99999999 OR feed_id:"57757"^99999999 OR
> feed_id:"99741"^99999999 OR feed_id:"70591"^99999999) OR *:*)) /* None */
>
> Filter query parameters:
>
> (valid_firms:(0 OR 1) OR (*:* AND -valid_firms:[* TO *]))
>
> publication_type:(news OR blog OR press_release OR publication)
>
> lang:(en OR es)
>
> published_at:["2021-04-01T07:00:00Z" TO "2021-04-15T16:42:28.150394Z"]
>
> OLD cluster query time
>
> "*QTime*":1209,
>
> NEW cluster query time – almost twice as long
>
> "*QTime*":2316,
>
> Thank you in advance for any help you can provide.
>
> Logo Description automatically generated
>
> a MODERN GOVERNANCE company
>
> *Russell Bahr­­*
>
> /Lead Infrastructure Engineer/
>
> 543 NW York Drive | Suite 100 | Bend, OR 97703
> Direct: 541-306-3271 | rbahr@manzama.com <ma...@manzama.com> |
> www.manzama.com<http://www.manzama.com> <http://www.manzama.com<http://www.manzama.com>>
>

--
Charlie Hull - Managing Consultant at OpenSource Connections Limited
<www.o19s.com<http://www.o19s.com>>
Founding member of The Search Network <https://thesearchnetwork.com/<https://thesearchnetwork.com>>
and co-author of Searching the Enterprise
<https://opensourceconnections.com/about-us/books-resources/<https://opensourceconnections.com/about-us/books-resources>>
tel/fax: +44 (0)8700 118334
mobile: +44 (0)7767 825828


Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

Posted by Charlie Hull <ch...@opensourceconnections.com>.
Hi Russell,

Your complex Boolean query and the amount of new documents you're adding 
every day remind me of the media monitoring applications I've seen for 
Solr. The way these were made performant (for people like Bloomberg) was 
to run them as a reverse search: e.g. to test each documents against a 
set of stored queries, rather than running a set of queries over an 
index. We built Luwak (now contributed as the Lucene Monitor) for this 
very purpose. https://www.flax.co.uk/index.html@p=3058.html has a short 
writeup.

As Alessandro has suggested you'll need to break down and figure out 
which part of your big query is causing the performance issue, which may 
lead you to a recent change in Solr, but I feel you also need to 
consider whether your overall architecture is suitable for your use 
case. I also wonder how maintainable your giant queries are and if 
anyone really understands the interplay of the various boosts and 
Booleans. If you've got lots of queries like this and if they're 
something users can generate/modify at will that won't help either.

Best

Charlie

On 20/04/2021 00:37, Russell Bahr wrote:
>
> We are trying to upgrade our solr clusters and are running into 
> performance issues when moving to the newer version. We are finding 
> that queries are taking more than double the amount of time to return 
> when provided with the same query and both clusters are indexed with 
> the same documents. The queries that we run are using booting as well 
> as groups and ngroups. Our original clusters were solr 4.10.4 and we 
> experienced a similar degradation going from 4.10.4 to 6.5.1 and were 
> able to get around that by splitting the work from one 30 server 
> cluster to two clusters one with 30 servers and a second with 35 
> clusters. It is not acceptable for us to more than double our clusters 
> again. I have gone through the documentation and made changes to the 
> schema and solr config as needed to upgrade but am still not sure why 
> we are experiencing such a dramatic degradation in performance.
>
> We are indexing about 550000 new documents daily and updating around 
> 550000 documents daily as well.
>
> The clusters are configured as follows with schema and configs and a 
> sample query that I am running against both cluster examples.
>
> Old cluster:
> Solr 6.5.1
> 31 GB heap
> OpenJDK 64-Bit Server VM - 1.8.0_275-8u275-b01-1~deb9u1-b01
>
> Shards -6 Replicas -5
>
> /18643418 docs/
>
> /Avg size/doc: 2.6Kb/
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":2665,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*indent*":"on",
>
>       "*wt*":"json",
>
>       "*_*":"1618866411985"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18728759,
>
>       "*ngroups*":14295515,
>
>       "*groups*":[{
>
> …
>
>
>
> New cluster: - this query takes about *10* times as long.
> Solr 8.7.0
> 31 GB heap
> OpenJDK 64-Bit Server VM - 11.0.9.1+1-post-Debian-1deb10u2
>
> Shards -5 Replicas -5
> /18643418 docs/
>
> /Avg size/doc: 2.6Kb/
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":27876,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*wt*":"json",
>
>       "*_*":"1618866396857"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18730577,
>
>       "*ngroups*":13988977,
>
> …
>
> Solr 6.5.1
>
> solr 6.5.1 schema.xml
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="articles" version="1.5">
>     <uniqueKey>id</uniqueKey>
>     <defaultSearchField>text</defaultSearchField>
>     <solrQueryParser defaultOperator="AND" />
>
>     <fieldType name="string" class="solr.StrField" 
> sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="boolean" class="solr.BoolField" 
> sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="int" class="solr.TrieIntField" precisionStep="0" 
> positionIncrementGap="0"/>
>     <fieldType name="float" class="solr.TrieFloatField" 
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="long" class="solr.TrieLongField" 
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="double" class="solr.TrieDoubleField" 
> precisionStep="0" positionIncrementGap="0"/>
>     <fieldType name="date" class="solr.TrieDateField" omitNorms="true" 
> precisionStep="6" positionIncrementGap="0"/>
>
> <!-- lowercases the entire field value, keeping it as a single token.  -->
> <fieldType name="lowercase" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">
>         <analyzer>
>             <tokenizer class="solr.KeywordTokenizerFactory"/>
>             <filter class="solr.LowerCaseFilterFactory" />
>         </analyzer>
>    </fieldType>
>
> <!-- Exact text, without word stemming -->
> <fieldType name="exact_text" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" 
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
> <!-- Exact text, case-sensitive, without word stemming -->
> <fieldType name="exact_text_and_case" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" 
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>         </analyzer>
>     </fieldType>
>
> <!-- Exact text (without word stemming) but normalized. Used for the 
> headline field -->
> <fieldType name="exact_text_normalized" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="false">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" 
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
> <!-- The default (stemmed) text field for general queries -->
> <fieldType name="text" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory" 
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" 
> language="English" />
>         </analyzer>
>         <analyzer type="query">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" 
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0"
> catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory" 
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" 
> language="English" />
>         </analyzer>
>     </fieldType>
>
> <!-- General -->
> <field name="id" type="string" indexed="true" stored="true" 
> multiValued="false" required="true" docValues="true"/>
>     <field name="django_ct" type="string" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>     <field name="django_id" type="string" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>     <field name="lang" type="string" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>
> <!-- Content -->
> <field name="headline" type="exact_text_normalized" indexed="true" 
> stored="true" multiValued="false" />
> <!-- <field name="intro" type="text" indexed="true" stored="false" 
> multiValued="false" /> -->
> <field name="intro" type="exact_text_normalized" indexed="true" 
> stored="false" multiValued="false" />
>     <field name="text" type="text" indexed="true" stored="false" 
> multiValued="false" />
>     <field name="content" type="text" indexed="false" stored="true" 
> multiValued="false" />
>     <field name="content_fulltext" type="text" stored="false" 
> indexed="true" multiValued="false" />
>     <field name="content_exact" type="exact_text" stored="false" 
> indexed="true" multiValued="false" /> <!-- generated from `text` -->
> <field name="content_exact_case" type="exact_text_and_case" 
> stored="false" indexed="true" multiValued="false" /> <!-- generated 
> from `text` -->
>
>
>     <!-- Source Data -->
> <field name="published_at" type="date" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>     <field name="publication_type" type="string" indexed="true" 
> stored="true" multiValued="false" docValues="true" />
>     <field name="feed_id" type="long" indexed="true" stored="true" 
> multiValued="true" docValues="true" />
>     <field name="subscription" type="int" indexed="true" 
> stored="false" docValues="true" />
>     <field name="priority_fetch" type="boolean" indexed="true" 
> stored="true" />
>
> <!-- Ranking -->
> <field name="priority" type="float" indexed="true" stored="false" 
> multiValued="false" docValues="true" />
>     <field name="site_rank" type="long" indexed="true" stored="false" 
> multiValued="false" docValues="true" />
>     <field name="combined_priority_weight" type="float" indexed="true" 
> stored="true" multiValued="false" docValues="true" />
>     <field name="valid_firms" type="long" indexed="true" 
> stored="false" multiValued="true" docValues="true" />
>
> <!-- Pre-Tagging of Saved Searches -->
> <field name="ss" type="long" indexed="true" stored="false" 
> multiValued="true" docValues="true" />
>     <field name="tags" type="string" indexed="true" stored="true" 
> multiValued="true" docValues="true" />
>     <field name="last_taggable_change" type="date" indexed="true" 
> stored="true" multiValued="false" docValues="true" />
>     <field name="tagged_topics" type="long" indexed="true" 
> stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_about_sources" type="long" indexed="true" 
> stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_created_sources" type="long" indexed="true" 
> stored="true" multiValued="true" docValues="true" />
>
> <!-- Event Specific -->
> <field name="end_date" type="date" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>     <field name="start_date" type="date" indexed="true" stored="true" 
> multiValued="false" docValues="true" />
>
> <!-- Twitter specific -->
> <field name="tweeter" type="lowercase" indexed="true" stored="true" 
> multiValued="false" />
>
> <!-- Functional -->
> <field name="fingerprint" type="string" stored="false" indexed="true" 
> multiValued="false" docValues="true" />
>     <field name="_version_" type="long" indexed="true" stored="true" 
> docValues="true" />
>
> <!-- Copy text into content_exact -->
> <copyField source="text" dest="content_exact" />
>     <copyField source="text" dest="content_exact_case" />
>
> <!-- Insights -->
> <field name="has_signal" type="int" indexed="true" stored="true" 
> multiValued="false"
> docValues="true" />
>
> <!-- Industry Entities -->
> <field name="industry_tags" type="long" indexed="true" stored="true" 
> multiValued="true" docValues="true" />
>
> </schema>
>
> solr 6.5.1 solrconfig.xml
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <config>
>
>
> <luceneMatchVersion>6.5.1</luceneMatchVersion>
>
> <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
>   <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
>   <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
>   <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
>   <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
>
> <lib dir="/total/crap/dir/ignored" />
>
> <dataDir>${solr.data.dir:}</dataDir>
>
>   <schemaFactory class="ClassicIndexSchemaFactory"/>
>
> <directoryFactory name="DirectoryFactory"
> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>
> <indexConfig>
>
> </indexConfig>
>
> <jmx />
>
> <updateHandler class="solr.DirectUpdateHandler2">
>
> <autoCommit>
>        <maxTime>600000</maxTime>
>        <openSearcher>false</openSearcher>
>      </autoCommit>
>
> <autoSoftCommit>
>         <maxTime>120000</maxTime>
>       </autoSoftCommit>
>
>
> <updateLog>
>       <str name="dir">${solr.data.dir:}</str>
>     </updateLog>
>
>   </updateHandler>
>
> <query>
>
> <maxBooleanClauses>4096</maxBooleanClauses>
>
> <filterCache class="solr.LRUCache"
> size="3600"
> initialSize="128"
> autowarmCount="128"/>
>
> <queryResultCache class="solr.LRUCache"
> size="1024"
> initialSize="64"
> autowarmCount="64"/>
>
> <documentCache class="solr.LRUCache"
> size="4096"
> initialSize="128"
> autowarmCount="0"/>
>
> <enableLazyFieldLoading>true</enableLazyFieldLoading>
>
> <queryResultWindowSize>20</queryResultWindowSize>
>
> <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
>
> <listener event="newSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
> </arr>
>     </listener>
>     <listener event="firstSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>         <lst>
>           <str name="q">static firstSearcher warming in 
> solrconfig.xml</str>
>         </lst>
>       </arr>
>     </listener>
>
> <useColdSearcher>true</useColdSearcher>
>
> <maxWarmingSearchers>4</maxWarmingSearchers>
>
>   </query>
>
> <requestDispatcher handleSelect="false" >
>
> <requestParsers enableRemoteStreaming="false"
> multipartUploadLimitInKB="2048000" />
>
> <httpCaching never304="true" />
>
> </requestDispatcher>
>
> <requestHandler name="/select" class="solr.SearchHandler">
> <lst name="defaults">
>        <str name="echoParams">explicit</str>
>        <int name="rows">10</int>
>        <str name="df">text</str>
>        <str name="group">true</str>
>        <str name="group.field">fingerprint</str>
>        <int name="group.limit">6</int>
>        <str name="group.ngroups">true</str>
>        <int name="f.feed_id.facet.mincount">1</int>
>        <int name="f.linked_searches.facet.mincount">1</int>
> <int name="timeAllowed">120000</int>
>      </lst>
>
> </requestHandler>
>
> <requestHandler name="/get" class="solr.RealTimeGetHandler">
>      <lst name="defaults">
>        <str name="omitHeader">true</str>
>        <str name="wt">json</str>
>        <str name="indent">true</str>
>      </lst>
>   </requestHandler>
>
> <requestHandler name="/export" class="solr.SearchHandler">
>     <lst name="invariants">
>       <str name="rq">{!xport}</str>
>       <str name="wt">xsort</str>
>       <str name="distrib">false</str>
>     </lst>
>
>     <arr name="components">
>       <str>query</str>
>     </arr>
>   </requestHandler>
>
> <requestHandler name="/update" class="solr.UpdateRequestHandler">
> </requestHandler>
>
> <requestHandler name="/update/extract"
> startup="lazy"
> class="solr.extraction.ExtractingRequestHandler" >
>     <lst name="defaults">
>       <str name="lowernames">true</str>
>       <str name="uprefix">ignored_</str>
>
> <!-- capture link hrefs but ignore div attributes -->
> <str name="captureAttr">true</str>
>       <str name="fmap.a">links</str>
>       <str name="fmap.div">ignored_</str>
>     </lst>
>   </requestHandler>
>
> <requestHandler name="/analysis/field"
> startup="lazy"
> class="solr.FieldAnalysisRequestHandler" />
>
> <requestHandler name="/analysis/document"
> class="solr.DocumentAnalysisRequestHandler"
> startup="lazy" />
>
> <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>     <lst name="invariants">
>       <str name="q">solrpingquery</str>
>     </lst>
>     <lst name="defaults">
>       <str name="echoParams">all</str>
>     </lst>
> </requestHandler>
>
> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>     <lst name="defaults">
>      <str name="echoParams">explicit</str>
>      <str name="echoHandler">true</str>
>     </lst>
>   </requestHandler>
>
> <requestHandler name="/replication" class="solr.ReplicationHandler" 
> startup="lazy" />
>
> <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
>
>     <str name="queryAnalyzerFieldType">textSpell</str>
>
> <lst name="spellchecker">
>       <str name="name">default</str>
>       <str name="field">name</str>
>       <str name="classname">solr.DirectSolrSpellChecker</str>
> <str name="distanceMeasure">internal</str>
> <float name="accuracy">0.5</float>
> <int name="maxEdits">2</int>
> <int name="minPrefix">1</int>
> <int name="maxInspections">5</int>
> <int name="minQueryLength">4</int>
> <float name="maxQueryFrequency">0.01</float>
> </lst>
>
> <lst name="spellchecker">
>       <str name="name">wordbreak</str>
>       <str name="classname">solr.WordBreakSolrSpellChecker</str>
>       <str name="field">name</str>
>       <str name="combineWords">true</str>
>       <str name="breakWords">true</str>
>       <int name="maxChanges">10</int>
>     </lst>
>
> </searchComponent>
>
> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>
> <searchComponent name="clustering"
> enable="${solr.clustering.enabled:false}"
> class="solr.clustering.ClusteringComponent" >
> <lst name="engine">
> <str name="name">default</str>
> <str 
> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
> <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
>     </lst>
>     <lst name="engine">
>       <str name="name">stc</str>
>       <str 
> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>     </lst>
>   </searchComponent>
>
> <requestHandler name="/clustering"
> startup="lazy"
> enable="${solr.clustering.enabled:false}"
> class="solr.SearchHandler">
>     <lst name="defaults">
>       <bool name="clustering">true</bool>
>       <str name="clustering.engine">default</str>
>       <bool name="clustering.results">true</bool>
> <str name="carrot.title">name</str>
>       <str name="carrot.url">id</str>
> <str name="carrot.snippet">features</str>
> <bool name="carrot.produceSummary">true</bool>
> <bool name="carrot.outputSubClusters">false</bool>
>
>        <str name="defType">edismax</str>
>        <str name="qf">
> text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
> </str>
>        <str name="q.alt">*:*</str>
>        <str name="rows">10</str>
>        <str name="fl">*,score</str>
>     </lst>
>     <arr name="last-components">
>       <str>clustering</str>
>     </arr>
>   </requestHandler>
>
> <searchComponent name="terms" class="solr.TermsComponent"/>
>
> <searchComponent name="elevator" class="solr.QueryElevationComponent" >
> <str name="queryFieldType">string</str>
>     <str name="config-file">elevate.xml</str>
>   </searchComponent>
>
> <searchComponent class="solr.HighlightComponent" name="highlight">
>     <highlighting>
> <fragmenter name="gap"
> default="true"
> class="solr.highlight.GapFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">100</int>
>         </lst>
>       </fragmenter>
> <fragmenter name="regex"
> class="solr.highlight.RegexFragmenter">
>         <lst name="defaults">
> <int name="hl.fragsize">70</int>
> <float name="hl.regex.slop">0.5</float>
> <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
>         </lst>
>       </fragmenter>
>
> <formatter name="html"
> default="true"
> class="solr.highlight.HtmlFormatter">
>         <lst name="defaults">
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>           <str name="hl.simple.post"><![CDATA[</em>]]></str>
>         </lst>
>       </formatter>
>
> <encoder name="html"
> class="solr.highlight.HtmlEncoder" />
>
> <fragListBuilder name="simple"
> class="solr.highlight.SimpleFragListBuilder"/>
>
> <fragListBuilder name="single"
> class="solr.highlight.SingleFragListBuilder"/>
>
> <fragListBuilder name="weighted"
> default="true"
> class="solr.highlight.WeightedFragListBuilder"/>
>
> <fragmentsBuilder name="default"
> default="true"
> class="solr.highlight.ScoreOrderFragmentsBuilder">
> </fragmentsBuilder>
>
> <fragmentsBuilder name="colored"
> class="solr.highlight.ScoreOrderFragmentsBuilder">
>         <lst name="defaults">
>           <str name="hl.tag.pre"><![CDATA[
>                <b style="background:yellow">,<b 
> style="background:lawgreen">,
>                <b style="background:aquamarine">,<b 
> style="background:magenta">,
>                <b style="background:palegreen">,<b 
> style="background:coral">,
>                <b style="background:wheat">,<b style="background:khaki">,
>                <b style="background:lime">,<b 
> style="background:deepskyblue">]]></str>
>           <str name="hl.tag.post"><![CDATA[</b>]]></str>
>         </lst>
>       </fragmentsBuilder>
>
>       <boundaryScanner name="default"
> default="true"
> class="solr.highlight.SimpleBoundaryScanner">
>         <lst name="defaults">
>           <str name="hl.bs.maxScan">10</str>
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>         </lst>
>       </boundaryScanner>
>
>       <boundaryScanner name="breakIterator"
> class="solr.highlight.BreakIteratorBoundaryScanner">
>         <lst name="defaults">
> <str name="hl.bs.type">WORD</str>
> <str name="hl.bs.language">en</str>
>           <str name="hl.bs.country">US</str>
>         </lst>
>       </boundaryScanner>
>     </highlighting>
>   </searchComponent>
>
> <queryResponseWriter name="json" class="solr.JSONResponseWriter">
> <str name="content-type">text/plain; charset=UTF-8</str>
>   </queryResponseWriter>
>
> <queryResponseWriter name="velocity" 
> class="solr.VelocityResponseWriter" startup="lazy"/>
>
> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>     <int name="xsltCacheLifetimeSeconds">5</int>
>   </queryResponseWriter>
>
>   <!-- Legacy config for the admin interface -->
> <admin>
>     <defaultQuery>*:*</defaultQuery>
>   </admin>
>
> </config>
>
> Solr 8.7.0
>
> solr 8.7.0 schema.xml
>
> <?xml version="1.0" encoding="UTF-8" ?> <schema name="articles" 
> version="1.6">     <uniqueKey>id</uniqueKey> <!--Define default scorer 
> --> <similarity class="solr.LegacyBM25SimilarityFactory"/> 
> <!--Depricated in solr 8 -->     
> <!--<defaultSearchField>text</defaultSearchField> -->     
> <!--<solrQueryParser defaultOperator="AND" /> -->     <!--Define 
> fieldTypes Trie* has been replaced by *PointField--> <fieldType 
> name="string" class="solr.StrField" sortMissingLast="true" 
> omitNorms="true"/>     <fieldType name="boolean" 
> class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>     
> <fieldType name="pint" class="solr.IntPointField" docValues="true"/> 
>     <fieldType name="pfloat" class="solr.FloatPointField" 
> docValues="true"/>    <fieldType name="plong" 
> class="solr.LongPointField" docValues="true"/>     <fieldType 
> name="pdouble" class="solr.DoublePointField" docValues="true" />     
> <fieldType name="pdate" class="solr.DatePointField" omitNorms="true" 
> docValues="true"/> <!-- lowercases the entire field value, keeping it 
> as a single token.  --> <fieldType name="lowercase" 
> class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
>         <analyzer>             <tokenizer 
> class="solr.KeywordTokenizerFactory"/>             <filter 
> class="solr.LowerCaseFilterFactory" />         </analyzer>     
> </fieldType> <!-- Exact text, without word stemming --> <fieldType 
> name="exact_text" class="solr.TextField" positionIncrementGap="100" 
> omitNorms="true">         <analyzer type="index">             
> <tokenizer class="solr.WhitespaceTokenizerFactory"/>             
> <filter class="solr.WordDelimiterGraphFilterFactory" 
> generateWordParts="1" generateNumberParts="0" catenateWords="1" 
> catenateNumbers="1" catenateAll="0" splitOnNumerics="0" 
> preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" 
> />        <filter class="solr.FlattenGraphFilterFactory"/>             
> <filter class="solr.LowerCaseFilterFactory"/>         </analyzer>    
> <analyzer type="query">      <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" 
> ignoreCase="true" expand="true"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />             <filter 
> class="solr.LowerCaseFilterFactory"/>         </analyzer>     
> </fieldType> <!-- Exact text, case-sensitive, without word stemming 
> --> <fieldType name="exact_text_and_case" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">         <analyzer 
> type="index">             <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />        <filter 
> class="solr.FlattenGraphFilterFactory"/>         </analyzer>    
> <analyzer type="query">      <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" 
> ignoreCase="true" expand="true"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />         </analyzer> 
>     </fieldType> <!-- Exact text (without word stemming) but 
> normalized. Used for the headline field --> <fieldType 
> name="exact_text_normalized" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">         <analyzer 
> type="index">             <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />        <filter 
> class="solr.FlattenGraphFilterFactory"/>             <filter 
> class="solr.LowerCaseFilterFactory"/>         </analyzer>    <analyzer 
> type="query">      <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" 
> ignoreCase="true" expand="true"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />             <filter 
> class="solr.LowerCaseFilterFactory"/>         </analyzer>     
> </fieldType> <!-- The default (stemmed) text field for general queries 
> --> <fieldType name="text" class="solr.TextField" 
> positionIncrementGap="100" omitNorms="true">         <analyzer 
> type="index">             <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />        <filter 
> class="solr.FlattenGraphFilterFactory"/>             <filter 
> class="solr.LowerCaseFilterFactory"/>             <filter 
> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/> 
>             <filter class="solr.SnowballPorterFilterFactory" 
> language="English" />         </analyzer>         <analyzer 
> type="query">             <tokenizer 
> class="solr.WhitespaceTokenizerFactory"/>            <filter 
> class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" 
> ignoreCase="true" expand="true"/>             <filter 
> class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" 
> generateNumberParts="0" catenateWords="1" catenateNumbers="1" 
> catenateAll="0" splitOnNumerics="0" preserveOriginal="0" 
> splitOnCaseChange="0" types="content-types.txt" />             <filter 
> class="solr.LowerCaseFilterFactory"/>             <filter 
> class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/> 
>             <filter class="solr.SnowballPorterFilterFactory" 
> language="English" />         </analyzer>     </fieldType> <!-- 
> General --> <field name="id" type="string" indexed="true" 
> stored="true" multiValued="false" required="true" docValues="true"/> 
>     <field name="django_ct" type="string" indexed="true" stored="true" 
> multiValued="false" docValues="true" />     <field name="django_id" 
> type="string" indexed="true" stored="true" multiValued="false" 
> docValues="true" />     <field name="lang" type="string" 
> indexed="true" stored="true" multiValued="false" docValues="true" /> 
> <!-- Content --> <field name="headline" type="exact_text_normalized" 
> indexed="true" stored="true" multiValued="false" /> <!-- <field 
> name="intro" type="text" indexed="true" stored="false" 
> multiValued="false" /> --> <field name="intro" 
> type="exact_text_normalized" indexed="true" stored="false" 
> multiValued="false" />     <field name="text" type="text" 
> indexed="true" stored="false" multiValued="false" />     <field 
> name="content" type="text" indexed="false" stored="true" 
> multiValued="false" />     <field name="content_fulltext" type="text" 
> stored="false" indexed="true" multiValued="false" />     <field 
> name="content_exact" type="exact_text" stored="false" indexed="true" 
> multiValued="false" /> <!-- generated from `text` --> <field 
> name="content_exact_case" type="exact_text_and_case" stored="false" 
> indexed="true" multiValued="false" /> <!-- generated from `text` --> 
>     <!-- Source Data --> <field name="published_at" type="pdate" 
> indexed="true" stored="true" multiValued="false" docValues="true" /> 
>     <field name="publication_type" type="string" indexed="true" 
> stored="true" multiValued="false" docValues="true" />     <field 
> name="feed_id" type="plong" indexed="true" stored="true" 
> multiValued="true" docValues="true" />     <field name="subscription" 
> type="pint" indexed="true" stored="false" docValues="true" />     
> <field name="priority_fetch" type="boolean" indexed="true" 
> stored="true" /> <!-- Ranking --> <field name="priority" type="pfloat" 
> indexed="true" stored="false" multiValued="false" docValues="true" /> 
>     <field name="site_rank" type="plong" indexed="true" stored="false" 
> multiValued="false" docValues="true" />     <field 
> name="combined_priority_weight" type="pfloat" indexed="true" 
> stored="true" multiValued="false" docValues="true" />     <field 
> name="valid_firms" type="plong" indexed="true" stored="false" 
> multiValued="true" docValues="true" /> <!-- Pre-Tagging of Saved 
> Searches --> <field name="ss" type="plong" indexed="true" 
> stored="false" multiValued="true" docValues="true" />     <field 
> name="tags" type="string" indexed="true" stored="true" 
> multiValued="true" docValues="true" />     <field 
> name="last_taggable_change" type="pdate" indexed="true" stored="true" 
> multiValued="false" docValues="true" />     <field 
> name="tagged_topics" type="plong" indexed="true" stored="true" 
> multiValued="true" docValues="true" />     <field 
> name="tagged_about_sources" type="plong" indexed="true" stored="true" 
> multiValued="true" docValues="true" />     <field 
> name="tagged_created_sources" type="plong" indexed="true" 
> stored="true" multiValued="true" docValues="true" /> <!-- Event 
> Specific --> <field name="end_date" type="pdate" indexed="true" 
> stored="true" multiValued="false" docValues="true" />     <field 
> name="start_date" type="pdate" indexed="true" stored="true" 
> multiValued="false" docValues="true" /> <!-- Twitter specific --> 
> <field name="tweeter" type="lowercase" indexed="true" stored="true" 
> multiValued="false" /> <!-- Functional --> <field name="fingerprint" 
> type="string" stored="false" indexed="true" multiValued="false" 
> docValues="true" />     <field name="_version_" type="plong" 
> indexed="true" stored="true" docValues="true" /> <!-- Copy text into 
> content_exact --> <copyField source="text" dest="content_exact" />     
> <copyField source="text" dest="content_exact_case" /> <!-- Insights 
> --> <field name="has_signal" type="pint" indexed="true" stored="true" 
> multiValued="false" docValues="true" /> <!-- Industry Entities --> 
> <field name="industry_tags" type="plong" indexed="true" stored="true" 
> multiValued="true" docValues="true" /> </schema>
>
> solr 8.7.0 solrconfig.xml
>
> <?xml version="1.0" encoding="UTF-8" ?> <config> 
> <luceneMatchVersion>8.7.0</luceneMatchVersion> <lib 
> dir="${solr.install.dir:../../../..}/contrib/extraction/lib" 
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/" 
> regex="solr-cell-\d.*\.jar" />   <lib 
> dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" 
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/" 
> regex="solr-clustering-\d.*\.jar" />   <lib 
> dir="${solr.install.dir:../../../..}/contrib/langid/lib/" 
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/" 
> regex="solr-langid-\d.*\.jar" />   <lib 
> dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" 
> />   <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" 
> regex=".*\.jar" />   <lib dir="${solr.install.dir:../../../..}/dist/" 
> regex="solr-velocity-\d.*\.jar" /> 
> <dataDir>${solr.data.dir:}</dataDir> <directoryFactory 
> name="DirectoryFactory" 
> class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/> 
>       <schemaFactory class="ClassicIndexSchemaFactory">         
> </schemaFactory> <codecFactory class="solr.SchemaCodecFactory"/>
> <indexConfig> <mergePolicyFactory 
> class="org.apache.solr.index.TieredMergePolicyFactory">           <int 
> name="maxMergeAtOnce">10</int>           <int 
> name="segmentsPerTier">2</int>           <double 
> name="noCFSRatio">0.1</double>         </mergePolicyFactory> 
> <lockType>${solr.lock.type:native}</lockType> </indexConfig>
> <jmx />
> <updateHandler class="solr.DirectUpdateHandler2">
> <updateLog>       <str name="dir">${solr.ulog.dir:}</str>       <int 
> name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int> 
>     </updateLog> <autoCommit>        <maxTime>600000</maxTime>        
> <maxDocs>1000000</maxDocs>        <openSearcher>false</openSearcher> 
>      </autoCommit>
> <autoSoftCommit>         <maxTime>120000</maxTime>       
> </autoSoftCommit> </updateHandler>
> <query>
> <maxBooleanClauses>4096</maxBooleanClauses> 
> <slowQueryThresholdMillis>100000</slowQueryThresholdMillis>
> <filterCache class="solr.CaffeineCache" size="3600" initialSize="2048" 
> autowarmCount="2048"/>
> <queryResultCache class="solr.CaffeineCache" size="1024" 
> initialSize="512" autowarmCount="512"/> <documentCache 
> class="solr.CaffeineCache" size="4096" initialSize="1024" 
> autowarmCount="1024"/> <cache name="perSegFilter" 
> class="solr.CaffeineCache" size="10" initialSize="0" 
> autowarmCount="10" regenerator="solr.NoOpRegenerator" /> 
> <enableLazyFieldLoading>true</enableLazyFieldLoading> 
> <queryResultWindowSize>20</queryResultWindowSize> 
> <queryResultMaxDocsCached>200</queryResultMaxDocsCached> <listener 
> event="newSearcher" class="solr.QuerySenderListener">       <arr 
> name="queries"> </arr>     </listener>     <listener 
> event="firstSearcher" class="solr.QuerySenderListener">       <arr 
> name="queries">         <lst>           <str name="q">static 
> firstSearcher warming in solrconfig.xml</str>         </lst>       
> </arr>     </listener> <useColdSearcher>true</useColdSearcher> 
> <maxWarmingSearchers>4</maxWarmingSearchers>   </query> 
> <requestDispatcher>
> <requestParsers enableRemoteStreaming="false" 
> multipartUploadLimitInKB="2048000" />
> <httpCaching never304="true" />
> </requestDispatcher> <requestHandler name="/select" 
> class="solr.SearchHandler"> <lst name="defaults">        <str 
> name="echoParams">explicit</str>        <int name="rows">10</int> 
>        <str name="df">text</str>        <str name="q.op">AND</str> 
>        <str name="group">true</str>        <str 
> name="group.field">fingerprint</str>        <int 
> name="group.limit">6</int>        <str name="group.ngroups">true</str> 
>        <int name="f.feed_id.facet.mincount">1</int>        <int 
> name="f.linked_searches.facet.mincount">1</int> <int 
> name="timeAllowed">120000</int> </lst>
> </requestHandler> <requestHandler name="/get" 
> class="solr.RealTimeGetHandler">      <lst name="defaults">        
> <str name="omitHeader">true</str>        <str name="wt">json</str> 
>        <str name="indent">true</str>      </lst>   </requestHandler>
> <requestHandler name="/export" class="solr.SearchHandler">     <lst 
> name="invariants">       <str name="rq">{!xport}</str>       <str 
> name="wt">xsort</str>       <str name="distrib">false</str>     </lst> 
>     <arr name="components">       <str>query</str>     </arr>   
> </requestHandler> <requestHandler name="/update" 
> class="solr.UpdateRequestHandler"> </requestHandler> <requestHandler 
> name="/update/extract" startup="lazy" 
> class="solr.extraction.ExtractingRequestHandler" >     <lst 
> name="defaults">       <str name="lowernames">true</str>       <str 
> name="uprefix">ignored_</str> <str name="captureAttr">true</str>      
>  <str name="fmap.a">links</str>       <str 
> name="fmap.div">ignored_</str>     </lst>   </requestHandler> 
> <requestHandler name="/analysis/field" startup="lazy" 
> class="solr.FieldAnalysisRequestHandler" />   <requestHandler 
> name="/analysis/document" class="solr.DocumentAnalysisRequestHandler" 
> startup="lazy" />
> <requestHandler name="/admin/ping" class="solr.PingRequestHandler"> 
>     <lst name="invariants">       <str name="q">solrpingquery</str> 
>     </lst>     <lst name="defaults">       <str 
> name="echoParams">all</str>     </lst> </requestHandler> 
> <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" > 
>     <lst name="defaults">      <str name="echoParams">explicit</str> 
>      <str name="echoHandler">true</str>     </lst>   </requestHandler> 
> <requestHandler name="/replication" class="solr.ReplicationHandler" 
> startup="lazy" /> <searchComponent name="spellcheck" 
> class="solr.SpellCheckComponent">     <str 
> name="queryAnalyzerFieldType">textSpell</str> <lst 
> name="spellchecker">       <str name="name">default</str>       <str 
> name="field">name</str>       <str 
> name="classname">solr.DirectSolrSpellChecker</str> <str 
> name="distanceMeasure">internal</str> <float 
> name="accuracy">0.5</float> <int name="maxEdits">2</int> <int 
> name="minPrefix">1</int> <int name="maxInspections">5</int> <int 
> name="minQueryLength">4</int> <float 
> name="maxQueryFrequency">0.01</float> </lst> <lst name="spellchecker"> 
>       <str name="name">wordbreak</str>       <str 
> name="classname">solr.WordBreakSolrSpellChecker</str>       <str 
> name="field">name</str>       <str name="combineWords">true</str> 
>       <str name="breakWords">true</str>       <int 
> name="maxChanges">10</int>     </lst> </searchComponent> 
> <searchComponent name="tvComponent" class="solr.TermVectorComponent"/> 
> <searchComponent name="clustering" 
> enable="${solr.clustering.enabled:false}" 
> class="solr.clustering.ClusteringComponent" > <lst name="engine"> <str 
> name="name">default</str> <str 
> name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str> 
> <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str> 
> <str name="carrot.lexicalResourcesDir">clustering/carrot2</str> <str 
> name="MultilingualClustering.defaultLanguage">ENGLISH</str>     </lst> 
>     <lst name="engine">       <str name="name">stc</str>       <str 
> name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str> 
>     </lst>   </searchComponent> <requestHandler name="/clustering" 
> startup="lazy" enable="${solr.clustering.enabled:false}" 
> class="solr.SearchHandler">     <lst name="defaults">       <bool 
> name="clustering">true</bool>       <str 
> name="clustering.engine">default</str>       <bool 
> name="clustering.results">true</bool> <str 
> name="carrot.title">name</str>       <str name="carrot.url">id</str> 
> <str name="carrot.snippet">features</str> <bool 
> name="carrot.produceSummary">true</bool> <bool 
> name="carrot.outputSubClusters">false</bool>        <str 
> name="defType">edismax</str>        <str name="qf"> text^0.5 
> features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 </str>        
> <str name="q.alt">*:*</str>        <str name="rows">10</str>        
> <str name="fl">*,score</str>     </lst>     <arr 
> name="last-components">       <str>clustering</str>     </arr>   
> </requestHandler>
> <searchComponent name="terms" class="solr.TermsComponent"/>
> <searchComponent name="elevator" class="solr.QueryElevationComponent" 
> > <str name="queryFieldType">string</str>     <str 
> name="config-file">elevate.xml</str>   </searchComponent> 
> <searchComponent class="solr.HighlightComponent" name="highlight">     
> <highlighting> <fragmenter name="gap" default="true" 
> class="solr.highlight.GapFragmenter">         <lst name="defaults"> 
>           <int name="hl.fragsize">100</int>         </lst>       
> </fragmenter> <fragmenter name="regex" 
> class="solr.highlight.RegexFragmenter">         <lst name="defaults"> 
> <int name="hl.fragsize">70</int> <float 
> name="hl.regex.slop">0.5</float> <str name="hl.regex.pattern">[-\w 
> ,/\n\&quot;&apos;]{20,200}</str>         </lst>       </fragmenter> 
> <formatter name="html" default="true" 
> class="solr.highlight.HtmlFormatter">         <lst name="defaults"> 
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>           
> <str name="hl.simple.post"><![CDATA[</em>]]></str>         </lst> 
>       </formatter> <encoder name="html" 
> class="solr.highlight.HtmlEncoder" /> <fragListBuilder name="simple" 
> class="solr.highlight.SimpleFragListBuilder"/> <fragListBuilder 
> name="single" class="solr.highlight.SingleFragListBuilder"/> 
> <fragListBuilder name="weighted" default="true" 
> class="solr.highlight.WeightedFragListBuilder"/> <fragmentsBuilder 
> name="default" default="true" 
> class="solr.highlight.ScoreOrderFragmentsBuilder"> </fragmentsBuilder> 
> <fragmentsBuilder name="colored" 
> class="solr.highlight.ScoreOrderFragmentsBuilder">         <lst 
> name="defaults">           <str name="hl.tag.pre"><![CDATA[ 
>                <b style="background:yellow">,<b 
> style="background:lawgreen">,                <b 
> style="background:aquamarine">,<b style="background:magenta">, 
>                <b style="background:palegreen">,<b 
> style="background:coral">,                <b 
> style="background:wheat">,<b style="background:khaki">,                
> <b style="background:lime">,<b 
> style="background:deepskyblue">]]></str>           <str 
> name="hl.tag.post"><![CDATA[</b>]]></str>         </lst>       
> </fragmentsBuilder>       <boundaryScanner name="default" 
> default="true" class="solr.highlight.SimpleBoundaryScanner">         
> <lst name="defaults">           <str name="hl.bs.maxScan">10</str> 
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>         
> </lst>       </boundaryScanner>       <boundaryScanner 
> name="breakIterator" 
> class="solr.highlight.BreakIteratorBoundaryScanner">         <lst 
> name="defaults"> <str name="hl.bs.type">WORD</str> <str 
> name="hl.bs.language">en</str>           <str 
> name="hl.bs.country">US</str>         </lst>       </boundaryScanner> 
>     </highlighting>   </searchComponent> <queryResponseWriter 
> name="json" class="solr.JSONResponseWriter"> <str 
> name="content-type">text/plain; charset=UTF-8</str>   
> </queryResponseWriter>
> <queryResponseWriter name="velocity" 
> class="solr.VelocityResponseWriter" startup="lazy"/>
> <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">     
> <int name="xsltCacheLifetimeSeconds">5</int>   </queryResponseWriter> 
> <admin>     <defaultQuery>*:*</defaultQuery>   </admin> </config>
>
> Solr Query examples.
>
> *:*
>
> {!boost 
> b=sum(product(99999999999,has_signal),product(pow(priority,10),pow(recip(abs(ms(NOW/HOUR,published_at)),2.77e-09,1,1),5)))}((tags:Real_Est 
> OR (((headline:"real estate"^99999999999 OR headline:"commercial 
> development"^99999999999 OR headline:"commercial 
> developer"^99999999999 OR "Real Estate" OR "Real Property" OR 
> "property law" OR "Property Deal" OR "Property Sale" OR "purchase of 
> land" OR "Homeowners Association" OR content_exact:"HOA" OR "Board of 
> Realtors" OR content_exact:"Property Development" OR "CAP Rate" OR 
> content_exact:"Housing Demand" OR "CRE Finance Council" OR "Housing 
> Supply" OR "Property Tax" OR content_exact:"FHA" OR 
> content_exact:"Fully Leased" OR content_exact:"Represented the Buyer" 
> OR content_exact:"Design/Build" OR "Ad Valorem" OR "Anchor Tenant" OR 
> "Build to suit" OR "Certificate of Occupancy" OR "Eminent Domain" OR 
> "new office building" OR "new office development" OR "Adverse 
> possession" OR "Allodial title" OR "planning law" OR "planning 
> permission" OR "housebuilder" OR "housebiilding" OR 
> content_exact:"housebuilder" OR "Fee Simple" OR "Fee tail" OR "Quiet 
> Title" OR "Restraint on alienation" OR "Rule in Shelley" OR "Doctrine 
> of worthier title" OR "Worthier Title Doctrine" OR 
> content_exact:"Easement" OR "Equitable servitude")) OR 
> ((tagged_topics:(27) OR tagged_about_sources:(27) OR 
> tagged_created_sources:(27)) OR (tagged_topics:(107263) OR 
> tagged_about_sources:(107263) OR tagged_created_sources:(107263)) OR 
> (((content_exact:"Office Building" OR "Office Complex" OR "Office 
> Tower" OR "Office Space" OR "Office Center" OR "Office Campus" OR 
> "Class A Office" OR "Class B Office" OR "Class C Office" OR 
> content_exact:"Class A Building" OR content_exact:"Class B Building" 
> OR content_exact:"Class C Building" OR content_exact:"Class A Tower" 
> OR content_exact:"Class B Tower" OR content_exact:"Class C Tower" OR 
> content_exact:"corporate office" OR "office property" OR "office 
> properties"))) OR (tagged_topics:(119) OR tagged_about_sources:(119) 
> OR tagged_created_sources:(119)))) AND NOT ("intellectual property" OR 
> "plan testimonial")) AND ((((tags:"geo_morocco"^0.9 OR *:*) OR 
> (content_exact:"March Madness"^0.19999 OR 
> headline:"recognizes"^0.19999 OR headline:("holiday sale" OR "tech 
> deals" OR "Black Friday Sale" OR "Black Friday deals"~5 OR "Market 
> Analysis" OR wildfire OR arrested OR stabbed OR "celebrate birthday"~5 
> OR "market expected boom"~5 OR "what to expect" OR "where to 
> find")^0.199999999999 OR content_exact:"state championship 
> game"^0.19999 OR content_exact:"playstation 4"^0.1999999999999 OR 
> content_exact:"recover after shock"^0.19999 OR content_exact:"losing 
> streak"^0.19999 OR content_exact:"with win over"^0.19999 OR 
> headline:(content_exact:"Islamic state")^0.19999 OR 
> headline:("accident")^0.1999999999 OR 
> headline:(content_exact:"badgers")^0.19999 headline:("part time" OR 
> "full time" OR "accuweather" OR "snowstorm" OR PHOTOS)^0.199999999999 
> OR headline:(content_exact:"investor alert")^0.19999999999999 OR 
> headline:(content_exact:"stock")^0.19999999 OR 
> headline:(content_exact:"cuts holdings" OR content_exact:"raises 
> holdings" OR content_exact:"reduces holdings")^0.19999999 OR 
> headline:("ResearchAndMarkets.com")^0.19999 OR 
> headline:(content_exact:"conference")^0.19999 OR 
> headline:(content_exact:"of the year")^0.19999 OR 
> headline:(content_exact:"rankings")^0.19999 OR ("edged 
> higher")^0.1999999999999999 OR ("edged lower")^0.1999999999999999 OR 
> headline:(content_exact:"blue devils")^0.19999 OR 
> headline:(content_exact:"shares climb")^0.19999 OR 
> headline:(content_exact:"volunteer")^0.19999999 OR 
> headline:(content_exact:"murderer")^0.19999 OR 
> headline:(content_exact:"murdered")^0.19999 OR 
> headline:(content_exact:"hurricane")^0.19999 OR 
> headline:(content_exact:"tornado")^0.19999 OR 
> headline:(content_exact:"storm")^0.19999 OR 
> headline:(content_exact:"found dead")^0.19999 OR 
> headline:(content_exact:"celebrity")^0.19999999 OR 
> headline:(content_exact:"registration underway")^0.19 OR 
> headline:(content_exact:"boko haram")^0.19999999 OR 
> headline:(content_exact:"police arrest")^0.19999 OR "human 
> remains"^0.1999 OR "slaying"^0.1999 OR "home prices"^0.1999 OR 
> "transfer news"^0.1999 OR headline:("militia")^0.19999999 OR 
> (content_exact:"shooting")^0.19999 OR headline:("ISIS")^0.19999999 OR 
> headline:(content_exact:"prostitution")^0.19999999 OR 
> headline:(content_exact:"drugs")^0.19999 OR 
> content_exact:"winger"^0.19999999 OR "happy birthday"^0.19999 OR 
> "happy easter"^0.19999 OR "merry christmas"^0.19999 OR "reported at 
> trading volume"^0.199999 OR "most active stocks"^0.199999 OR "loss 
> narrows"^0.199999 OR "earnings conference"^0.199999 OR "put 
> options"^0.199999 OR "trading range"^0.199999 OR "week low"^0.199999 
> OR "week high"^0.199999 OR "neutral"^0.199999 OR "downgraded"^0.199999 
> OR "upgraded"^0.199999 OR "average rating"^0.199999 OR "financial 
> report"^0.19999999 OR "quarterly"^0.199999 OR "q1 loss"^0.19 OR "q3 
> loss"^0.19999999 OR "q4 loss"^0.19999999 OR "q2 loss"^0.19999999 OR 
> "financial results"^0.1999999 OR "upgrades"^0.19999999 OR 
> "upgraded"^0.19999 OR "downgrades"^0.19999 OR "downgraded"^0.19999 OR 
> "consensus estimate"^0.19999 OR "analyst estimate"^0.19999 OR 
> "consensus analyst estimate"^0.199999 OR "q1 results"^0.19999 OR "q2 
> results"^0.19999 OR "q3 results"^0.19999999 OR "q4 results"^0.19999 OR 
> content_exact:"EPS"^0.19999999 OR "fiscal results"^0.19999 OR 
> "financial results"^0.1999 OR "profits up"^0.19999999 OR "profit 
> down"^0.19999 OR "quarter report"^0.19999 OR "quarterly report"^0.19 
> OR "earnings"^0.19999 OR "quarterly results"^0.19999999 OR "earnings 
> report"^0.19999999 OR "quarterly earnings"^0.19999 OR 
> content_exact:"narrows"^0.19999 OR content_exact:"quarter 
> loss"^0.19999999 OR content_exact:"quarterly losses"^0.19999 OR 
> content_exact:"quarterly loss"^0.19999 OR content_exact:"quarter 
> results"^0.19999999 OR content_exact:"report of earnings"^0.19999999 
> OR "earnings release"^0.19999999 OR "research reports"^0.19999999 OR 
> "target raised"^0.19999999 OR "try any of our foolish"^0.19999999 OR 
> "jim cramer"^0.19999999 OR content_exact:"jumps"^0.19 OR 
> headline:(content_exact:"coverage")^0.1999999 OR headline:("rose 
> stock"~5)^0.1999999999 OR headline:("declined stock"~5)^0.1999999999 
> OR headline:("FOREX")^0.199999999 OR 
> content_exact:"unloads"^0.19999999 OR "shares drops"^0.19999999 OR 
> "research and markets"^0.19999999 OR headline:("price 
> target")^0.1999999999 OR headline:("early movers")^0.1999999999 OR 
> headline:("rating")^0.1999999999 OR headline:("stock")^0.1999999999 OR 
> headline:("stocks")^0.199999999 OR "U.S. stocks were lower"^0.1999999 
> OR headline:("slides")^0.199999999 OR headline:("wall st")^0.199999999 
> OR headline:("indexes")^0.199999999 OR headline:("financial 
> results")^0.1999999999999999 OR headline:("closing bell")^0.19 OR 
> headline:(content_exact:"higher volume")^0.1999 OR headline:("trading 
> lower")^0.1999 OR headline:(content_exact:"research and 
> markets")^0.1999999 OR (content_exact:"mid-day changers")^0.1999999 OR 
> (headline:"a share")^0.1999999 OR (headline:"insider 
> buying")^0.1999999 OR (headline:"short interest")^0.1999999 OR 
> (headline:"shares of")^0.1999999 OR (headline:"market 
> movers")^0.1999999 OR (headline:"analyst")^0.19999999999 OR 
> (headline:"analysts")^0.19999999999 OR (headline:"dow 
> spikes")^0.19999999999 OR (headline:"dow movers")^0.1999999 OR 
> (headline:"bidness")^0.1999999)) AND NOT ((headline:("market report" 
> OR "market by offering" OR "market segmentation"~6 OR "applications 
> forecast" OR "market tremendous growth"~8 OR "market significant 
> growth"~8 OR "market status" OR "forecast 2019"~4 OR "forecast 2020"~4 
> OR "forecast 2021"~4 OR "forecast 2022"~4 OR "forecast 2023"~4 OR 
> "forecast 2024"~4 OR "forecast 2025"~4 OR "forecast 2026"~4 OR 
> "forecast 2027"~4 OR "valuation reach"~4 OR "market grow during"~5 OR 
> "market survey report"~5 OR "holding cut by") OR headline:("investing 
> advise" OR "market to witness" OR "position decreased by" OR 
> "increases stake" OR "market study" OR "market size" OR "global 
> forecast" OR "stock analysts" OR "sentiment shift") OR 
> headline:("global industry") OR headline:("dow gains") OR 
> headline:("forecast industry"~5 OR "worldwide forecast"~7 OR "market 
> analysis"~5) OR headline:("researchandmarkets.com") OR 
> headline:("morning movers") OR headline:("markets now") OR 
> headline:("market trends"~5) OR headline:("market estimated valued"~9) 
> OR headline:("market projected to grow") OR headline:("market expected 
> to grow"~6) OR headline:("falls to low"~6) OR headline:("Zacks 
> investment research") OR headline:("SWOT analysis") OR "equal weight" 
> OR headline:("brokerage recommendations") OR headline:("ratings 
> outlook") OR headline:("financial stocks") OR headline:("equities 
> research") OR headline:("given average recommendation") OR 
> headline:("from analysts") OR headline:("target price") OR "Barclays 
> target price"~15 OR headline:("Consensus Recommendation") OR 
> headline:("Coverage initiated") OR headline:("Wall street opens 
> lower") OR headline:("Wall street pulls back") OR headline:("Wall 
> street advances") OR headline:("Wall street opens higher") OR 
> headline:("REPORTS ACQUISITION BY DIRECTOR") OR headline:("REPORTS 
> ACQUISITION BY Senior") OR headline:("REPORTS ACQUISITION BY VP") OR 
> headline:("REPORTS ACQUISITION BY executive") OR headline:("REPORTS 
> ACQUISITION BY CEO") headline:("cut sell"~3) OR headline:("lowered 
> sell"~3) OR headline:("PT lowered") OR headline:("cut neutral"~3) OR 
> headline:("lowered neutral"~3) OR headline:("cut hold"~3) OR 
> headline:("lowered hold"~3) OR headline:("hold rating"~3) OR 
> headline:("raised buy"~4) OR headline:("raised to") OR 
> headline:("lowered buy"~4) OR headline:("rating buy"~4) OR 
> headline:("rating add"~4) OR headline:("lowered underperform"~3) OR 
> headline:("outperform") OR headline:("downgraded by") OR 
> headline:("upgraded by") OR headline:("downgraded to") OR 
> headline:("upgraded to") OR headline:("announces dividend"~3) OR 
> headline:("plans dividend"~3) headline:("issues dividend"~3) OR 
> headline:("shares sold") OR headline:("shares bought") OR ("shares 
> reached high"~9) OR "research note issued to investors" OR "move per 
> share"~8) OR "apply now" OR "Undergraduate degree or equivalent"~6 OR 
> "your cv" OR "Add my CV to the" OR "We are currently looking for a" OR 
> "a competitive salary" OR headline:("roadshow" OR "terms of service 
> violation") OR headline:("best deals"~4 OR "thanksgiving travel"~4 OR 
> "thanksgiving guide"~4 OR "happy thanksgiving" OR "best of 2018"~5 OR 
> "black friday hours"~5 OR "black Friday freebies"~5 OR "stores open 
> thanksgiving"~5 OR "stores open christmas"~5 OR "cyber monday" OR 
> "black friday deal"~8 OR "thanksgiving dinner" OR santa OR "wedding 
> announcements" OR "holiday sales" OR "white nationalist" OR "shooting" 
> OR "mall shootings" OR "stabbing" OR "holiday gift" OR "family 
> killed"~7 OR "killed by car" OR "apply now" OR obituary OR "entry 
> level" OR "support worker" OR "a career within" OR "recipe" OR 
> "Exclusive opportunity" OR "content acquisition")))) AND NOT 
> ((feed_id:"101505" OR feed_id:"95622" OR feed_id:"104135" OR 
> feed_id:"95624" OR feed_id:"6537" OR feed_id:"104138" OR 
> feed_id:"104140" OR feed_id:"95629" OR feed_id:"92622" OR 
> feed_id:"104366" OR feed_id:"99342" OR feed_id:"82520" OR 
> feed_id:"94172" OR feed_id:"11967")) AND 
> ((tags:content_us^999999999999) OR *:*) AND (((tags:"news_major"^99) 
> OR feed_id:"108735"^99999999 OR feed_id:"68677"^99999999 OR 
> feed_id:"89672"^99999999 OR feed_id:"94600"^99999999 OR 
> feed_id:"95627"^99999999 OR feed_id:"11501"^99999999 OR 
> feed_id:"3470"^99999999 OR feed_id:"53326"^99999999 OR 
> feed_id:"42417"^99999999 OR feed_id:"43069"^99999999 OR 
> feed_id:"108734"^99999999 OR feed_id:"75797"^99999999 OR 
> feed_id:"107094"^99999999 OR feed_id:"48503"^99999999 OR 
> feed_id:"105598"^99999999 OR feed_id:"11675"^99999999 OR 
> feed_id:"28476"^99999999 OR feed_id:"57757"^99999999 OR 
> feed_id:"99741"^99999999 OR feed_id:"70591"^99999999) OR *:*)) /* None */
>
> Filter query parameters:
>
> (valid_firms:(0 OR 1) OR (*:* AND -valid_firms:[* TO *]))
>
> publication_type:(news OR blog OR press_release OR publication)
>
> lang:(en OR es)
>
> published_at:["2021-04-01T07:00:00Z" TO "2021-04-15T16:42:28.150394Z"]
>
> OLD cluster query time
>
> "*QTime*":1209,
>
> NEW cluster query time – almost twice as long
>
> "*QTime*":2316,
>
> Thank you in advance for any help you can provide.
>
> Logo Description automatically generated
>
> a MODERN GOVERNANCE company
>
> *Russell Bahr­­*
>
> /Lead Infrastructure Engineer/
>
> 543 NW York Drive | Suite 100 | Bend, OR 97703
> Direct: 541-306-3271 | rbahr@manzama.com <ma...@manzama.com> | 
> www.manzama.com <http://www.manzama.com>
>

-- 
Charlie Hull - Managing Consultant at OpenSource Connections Limited 
<www.o19s.com>
Founding member of The Search Network <https://thesearchnetwork.com/> 
and co-author of Searching the Enterprise 
<https://opensourceconnections.com/about-us/books-resources/>
tel/fax: +44 (0)8700 118334
mobile: +44 (0)7767 825828

Re: Queries on solr cloud 8.7 take more than twice as long than same query with same documents on solr cloud 6.5.1

Posted by Alessandro Benedetti <a....@sease.io>.
Hi,
that's definitely a monster query full of term boosts and function query
boosts plus grouping.
I would recommend a "divide et impera" approach:
1) identify the main components of your query (function query boosting,
term query boosting, grouping, ect)
2) start from the simplest query and compare with 6.x
3) iteratively add complexity and measure
4) you should be able to identify the culprit

A different story is if you really need such a monster query, which seems
really suspicious (but would require some deep study to recommend.

Cheers
--------------------------
Alessandro Benedetti
Apache Lucene/Solr Committer
Director, R&D Software Engineer, Search Consultant

www.sease.io


On Tue, 20 Apr 2021 at 01:27, Russell Bahr <rb...@manzama.com> wrote:

> We are trying to upgrade our solr clusters and are running into
> performance issues when moving to the newer version. We are finding that
> queries are taking more than double the amount of time to return when
> provided with the same query and both clusters are indexed with the same
> documents. The queries that we run are using booting as well as groups and
> ngroups. Our original clusters were solr 4.10.4 and we experienced a
> similar degradation going from 4.10.4 to 6.5.1 and were able to get around
> that by splitting the work from one 30 server cluster to two clusters one
> with 30 servers and a second with 35 clusters. It is not acceptable for us
> to more than double our clusters again. I have gone through the
> documentation and made changes to the schema and solr config as needed to
> upgrade but am still not sure why we are experiencing such a dramatic
> degradation in performance.
>
>
>
> We are indexing about 550000 new documents daily and updating around
> 550000 documents daily as well.
>
>
>
> The clusters are configured as follows with schema and configs and a
> sample query that I am running against both cluster examples.
>
>
>
> Old cluster:
> Solr 6.5.1
> 31 GB heap
> OpenJDK 64-Bit Server VM - 1.8.0_275-8u275-b01-1~deb9u1-b01
>
> Shards -6 Replicas -5
>
> *18643418 docs*
>
> *Avg size/doc: 2.6Kb*
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":2665,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*indent*":"on",
>
>       "*wt*":"json",
>
>       "*_*":"1618866411985"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18728759,
>
>       "*ngroups*":14295515,
>
>       "*groups*":[{
>
>
>
> …
>
>
>
> New cluster: - this query takes about *10* times as long.
> Solr 8.7.0
> 31 GB heap
> OpenJDK 64-Bit Server VM - 11.0.9.1+1-post-Debian-1deb10u2
>
> Shards -5 Replicas -5
> *18643418 docs*
>
> *Avg size/doc: 2.6Kb*
>
> http://localhost:8983/solr/content/select?indent=on&q=*:*&wt=json
>
> {
>
>   "*responseHeader*":{
>
>     "*zkConnected*":true,
>
>     "*status*":0,
>
>     "*QTime*":27876,
>
>     "*params*":{
>
>       "*q*":"*:*",
>
>       "*wt*":"json",
>
>       "*_*":"1618866396857"}},
>
>   "*grouped*":{
>
>     "*fingerprint*":{
>
>       "*matches*":18730577,
>
>       "*ngroups*":13988977,
>
>
>
> …
>
>
>
>
>
> Solr 6.5.1
>
>
>
> solr 6.5.1 schema.xml
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="articles" version="1.5">
>     <uniqueKey>id</uniqueKey>
>     <defaultSearchField>text</defaultSearchField>
>     <solrQueryParser defaultOperator="AND" />
>
>     <fieldType name="string"  class="solr.StrField" sortMissingLast="true"
> omitNorms="true"/>
>     <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"
> omitNorms="true"/>
>     <fieldType name="int" class="solr.TrieIntField" precisionStep="0"
> positionIncrementGap="0"/>
>     <fieldType name="float" class="solr.TrieFloatField" precisionStep="0"
> positionIncrementGap="0"/>
>     <fieldType name="long" class="solr.TrieLongField" precisionStep="0"
> positionIncrementGap="0"/>
>     <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0"
> positionIncrementGap="0"/>
>     <fieldType name="date" class="solr.TrieDateField" omitNorms="true"
> precisionStep="6" positionIncrementGap="0"/>
>
>     <!-- lowercases the entire field value, keeping it as a single
> token.  -->
>     <fieldType name="lowercase" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer>
>             <tokenizer class="solr.KeywordTokenizerFactory"/>
>             <filter class="solr.LowerCaseFilterFactory" />
>         </analyzer>
>    </fieldType>
>
>     <!-- Exact text, without word stemming -->
>     <fieldType name="exact_text" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
>     <!-- Exact text, case-sensitive, without word stemming -->
>     <fieldType name="exact_text_and_case" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>         </analyzer>
>     </fieldType>
>
>     <!-- Exact text (without word stemming) but normalized. Used for the
> headline field -->
>     <fieldType name="exact_text_normalized" class="solr.TextField"
> positionIncrementGap="100" omitNorms="false">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
>     <!-- The default (stemmed) text field for general queries -->
>     <fieldType name="text" class="solr.TextField" positionIncrementGap="100"
> omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory"
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" language="English"
> />
>         </analyzer>
>         <analyzer type="query">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
> ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory"
> generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0"
> splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"
> />
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory"
> preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" language="English"
> />
>         </analyzer>
>     </fieldType>
>
>     <!-- General -->
>     <field name="id" type="string" indexed="true" stored="true"
> multiValued="false" required="true" docValues="true"/>
>     <field name="django_ct" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="django_id" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="lang" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>
>     <!-- Content -->
>     <field name="headline" type="exact_text_normalized" indexed="true"
> stored="true" multiValued="false" />
>     <!-- <field name="intro" type="text" indexed="true" stored="false"
> multiValued="false" /> -->
>     <field name="intro" type="exact_text_normalized" indexed="true" stored="false"
> multiValued="false" />
>     <field name="text" type="text" indexed="true" stored="false"
> multiValued="false" />
>     <field name="content" type="text" indexed="false" stored="true"
> multiValued="false" />
>     <field name="content_fulltext" type="text" stored="false" indexed="true"
> multiValued="false" />
>     <field name="content_exact" type="exact_text" stored="false" indexed="true"
> multiValued="false" />               <!-- generated from `text` -->
>     <field name="content_exact_case" type="exact_text_and_case" stored="false"
> indexed="true" multiValued="false" /> <!-- generated from `text` -->
>
>
>     <!-- Source Data -->
>     <field name="published_at" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="publication_type" type="string" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="feed_id" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="subscription" type="int" indexed="true" stored="false"
> docValues="true" />
>     <field name="priority_fetch" type="boolean" indexed="true" stored="true"
> />
>
>     <!-- Ranking -->
>     <field name="priority" type="float" indexed="true" stored="false"
> multiValued="false" docValues="true" />
>     <field name="site_rank" type="long" indexed="true" stored="false"
> multiValued="false" docValues="true" />
>     <field name="combined_priority_weight" type="float" indexed="true"
> stored="true" multiValued="false" docValues="true" />
>     <field name="valid_firms" type="long" indexed="true" stored="false"
> multiValued="true" docValues="true" />
>
>     <!-- Pre-Tagging of Saved Searches -->
>     <field name="ss" type="long" indexed="true" stored="false" multiValued="true"
> docValues="true" />
>     <field name="tags" type="string" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="last_taggable_change" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="tagged_topics" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="tagged_about_sources" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>     <field name="tagged_created_sources" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>
>     <!-- Event Specific -->
>     <field name="end_date" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>     <field name="start_date" type="date" indexed="true" stored="true"
> multiValued="false" docValues="true" />
>
>     <!-- Twitter specific -->
>     <field name="tweeter" type="lowercase" indexed="true" stored="true"
> multiValued="false" />
>
>     <!-- Functional -->
>     <field name="fingerprint" type="string" stored="false" indexed="true"
> multiValued="false" docValues="true" />
>     <field name="_version_" type="long" indexed="true" stored="true"
> docValues="true" />
>
>     <!-- Copy text into content_exact -->
>     <copyField source="text" dest="content_exact" />
>     <copyField source="text" dest="content_exact_case" />
>
>     <!-- Insights -->
>     <field name="has_signal" type="int" indexed="true" stored="true"
> multiValued="false"
>            docValues="true" />
>
>     <!-- Industry Entities -->
>     <field name="industry_tags" type="long" indexed="true" stored="true"
> multiValued="true" docValues="true" />
>
> </schema>
>
>
>
> solr 6.5.1 solrconfig.xml
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <config>
>
>
>   <luceneMatchVersion>6.5.1</luceneMatchVersion>
>
>   <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
>   <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
>   <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
>   <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
>
>   <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
>   <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
>
>   <lib dir="/total/crap/dir/ignored" />
>
>   <dataDir>${solr.data.dir:}</dataDir>
>
>   <schemaFactory class="ClassicIndexSchemaFactory"/>
>
>   <directoryFactory name="DirectoryFactory"
>                     class
> ="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>
>   <indexConfig>
>
> </indexConfig>
>
>   <jmx />
>
>   <updateHandler class="solr.DirectUpdateHandler2">
>
>      <autoCommit>
>        <maxTime>600000</maxTime>
>        <openSearcher>false</openSearcher>
>      </autoCommit>
>
>       <autoSoftCommit>
>         <maxTime>120000</maxTime>
>       </autoSoftCommit>
>
>
>     <updateLog>
>       <str name="dir">${solr.data.dir:}</str>
>     </updateLog>
>
>   </updateHandler>
>
>   <query>
>
>    <maxBooleanClauses>4096</maxBooleanClauses>
>
>    <filterCache class="solr.LRUCache"
>                  size="3600"
>                  initialSize="128"
>                  autowarmCount="128"/>
>
>     <queryResultCache class="solr.LRUCache"
>                      size="1024"
>                      initialSize="64"
>                      autowarmCount="64"/>
>
>     <documentCache class="solr.LRUCache"
>                    size="4096"
>                    initialSize="128"
>                    autowarmCount="0"/>
>
>     <enableLazyFieldLoading>true</enableLazyFieldLoading>
>
>   <queryResultWindowSize>20</queryResultWindowSize>
>
>   <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
>
>     <listener event="newSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>       </arr>
>     </listener>
>     <listener event="firstSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>         <lst>
>           <str name="q">static firstSearcher warming in solrconfig.xml
> </str>
>         </lst>
>       </arr>
>     </listener>
>
>    <useColdSearcher>true</useColdSearcher>
>
>     <maxWarmingSearchers>4</maxWarmingSearchers>
>
>   </query>
>
>   <requestDispatcher handleSelect="false" >
>
>    <requestParsers enableRemoteStreaming="false"
>                     multipartUploadLimitInKB="2048000" />
>
>     <httpCaching never304="true" />
>
>   </requestDispatcher>
>
>   <requestHandler name="/select" class="solr.SearchHandler">
>      <lst name="defaults">
>        <str name="echoParams">explicit</str>
>        <int name="rows">10</int>
>        <str name="df">text</str>
>        <str name="group">true</str>
>        <str name="group.field">fingerprint</str>
>        <int name="group.limit">6</int>
>        <str name="group.ngroups">true</str>
>        <int name="f.feed_id.facet.mincount">1</int>
>        <int name="f.linked_searches.facet.mincount">1</int>
>        <int name="timeAllowed">120000</int>
>      </lst>
>
>     </requestHandler>
>
>   <requestHandler name="/get" class="solr.RealTimeGetHandler">
>      <lst name="defaults">
>        <str name="omitHeader">true</str>
>        <str name="wt">json</str>
>        <str name="indent">true</str>
>      </lst>
>   </requestHandler>
>
>   <requestHandler name="/export" class="solr.SearchHandler">
>     <lst name="invariants">
>       <str name="rq">{!xport}</str>
>       <str name="wt">xsort</str>
>       <str name="distrib">false</str>
>     </lst>
>
>     <arr name="components">
>       <str>query</str>
>     </arr>
>   </requestHandler>
>
>   <requestHandler name="/update" class="solr.UpdateRequestHandler">
>   </requestHandler>
>
>   <requestHandler name="/update/extract"
>                   startup="lazy"
>                   class="solr.extraction.ExtractingRequestHandler" >
>     <lst name="defaults">
>       <str name="lowernames">true</str>
>       <str name="uprefix">ignored_</str>
>
>       <!-- capture link hrefs but ignore div attributes -->
>       <str name="captureAttr">true</str>
>       <str name="fmap.a">links</str>
>       <str name="fmap.div">ignored_</str>
>     </lst>
>   </requestHandler>
>
>   <requestHandler name="/analysis/field"
>                   startup="lazy"
>                   class="solr.FieldAnalysisRequestHandler" />
>
>   <requestHandler name="/analysis/document"
>                   class="solr.DocumentAnalysisRequestHandler"
>                   startup="lazy" />
>
>   <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>     <lst name="invariants">
>       <str name="q">solrpingquery</str>
>     </lst>
>     <lst name="defaults">
>       <str name="echoParams">all</str>
>     </lst>
>   </requestHandler>
>
>   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>     <lst name="defaults">
>      <str name="echoParams">explicit</str>
>      <str name="echoHandler">true</str>
>     </lst>
>   </requestHandler>
>
>    <requestHandler name="/replication" class="solr.ReplicationHandler"
> startup="lazy" />
>
>   <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
>
>     <str name="queryAnalyzerFieldType">textSpell</str>
>
>     <lst name="spellchecker">
>       <str name="name">default</str>
>       <str name="field">name</str>
>       <str name="classname">solr.DirectSolrSpellChecker</str>
>       <str name="distanceMeasure">internal</str>
>       <float name="accuracy">0.5</float>
>       <int name="maxEdits">2</int>
>       <int name="minPrefix">1</int>
>       <int name="maxInspections">5</int>
>       <int name="minQueryLength">4</int>
>       <float name="maxQueryFrequency">0.01</float>
>     </lst>
>
>     <lst name="spellchecker">
>       <str name="name">wordbreak</str>
>       <str name="classname">solr.WordBreakSolrSpellChecker</str>
>       <str name="field">name</str>
>       <str name="combineWords">true</str>
>       <str name="breakWords">true</str>
>       <int name="maxChanges">10</int>
>     </lst>
>
>   </searchComponent>
>
>   <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>
>   <searchComponent name="clustering"
>                    enable="${solr.clustering.enabled:false}"
>                    class="solr.clustering.ClusteringComponent" >
>     <lst name="engine">
>       <str name="name">default</str>
>       <str name="carrot.algorithm">
> org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
>       <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20
> </str>
>       <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
>       <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
>     </lst>
>     <lst name="engine">
>       <str name="name">stc</str>
>       <str name="carrot.algorithm">
> org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>     </lst>
>   </searchComponent>
>
>   <requestHandler name="/clustering"
>                   startup="lazy"
>                   enable="${solr.clustering.enabled:false}"
>                   class="solr.SearchHandler">
>     <lst name="defaults">
>       <bool name="clustering">true</bool>
>       <str name="clustering.engine">default</str>
>       <bool name="clustering.results">true</bool>
>       <str name="carrot.title">name</str>
>       <str name="carrot.url">id</str>
>       <str name="carrot.snippet">features</str>
>        <bool name="carrot.produceSummary">true</bool>
>        <bool name="carrot.outputSubClusters">false</bool>
>
>        <str name="defType">edismax</str>
>        <str name="qf">
>          text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
>        </str>
>        <str name="q.alt">*:*</str>
>        <str name="rows">10</str>
>        <str name="fl">*,score</str>
>     </lst>
>     <arr name="last-components">
>       <str>clustering</str>
>     </arr>
>   </requestHandler>
>
>   <searchComponent name="terms" class="solr.TermsComponent"/>
>
>   <searchComponent name="elevator" class="solr.QueryElevationComponent" >
>     <str name="queryFieldType">string</str>
>     <str name="config-file">elevate.xml</str>
>   </searchComponent>
>
>   <searchComponent class="solr.HighlightComponent" name="highlight">
>     <highlighting>
>       <fragmenter name="gap"
>                   default="true"
>                   class="solr.highlight.GapFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">100</int>
>         </lst>
>       </fragmenter>
>       <fragmenter name="regex"
>                   class="solr.highlight.RegexFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">70</int>
>           <float name="hl.regex.slop">0.5</float>
>           <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}
> </str>
>         </lst>
>       </fragmenter>
>
>       <formatter name="html"
>                  default="true"
>                  class="solr.highlight.HtmlFormatter">
>         <lst name="defaults">
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>           <str name="hl.simple.post"><![CDATA[</em>]]></str>
>         </lst>
>       </formatter>
>
>       <encoder name="html"
>                class="solr.highlight.HtmlEncoder" />
>
>      <fragListBuilder name="simple"
>                        class="solr.highlight.SimpleFragListBuilder"/>
>
>       <fragListBuilder name="single"
>                        class="solr.highlight.SingleFragListBuilder"/>
>
>       <fragListBuilder name="weighted"
>                        default="true"
>                        class="solr.highlight.WeightedFragListBuilder"/>
>
>       <fragmentsBuilder name="default"
>                         default="true"
>                         class="solr.highlight.ScoreOrderFragmentsBuilder">
>       </fragmentsBuilder>
>
>       <fragmentsBuilder name="colored"
>                         class="solr.highlight.ScoreOrderFragmentsBuilder">
>         <lst name="defaults">
>           <str name="hl.tag.pre"><![CDATA[
>                <b style="background:yellow">,<b
> style="background:lawgreen">,
>                <b style="background:aquamarine">,<b
> style="background:magenta">,
>                <b style="background:palegreen">,<b
> style="background:coral">,
>                <b style="background:wheat">,<b style="background:khaki">,
>                <b style="background:lime">,<b
> style="background:deepskyblue">]]></str>
>           <str name="hl.tag.post"><![CDATA[</b>]]></str>
>         </lst>
>       </fragmentsBuilder>
>
>       <boundaryScanner name="default"
>                        default="true"
>                        class="solr.highlight.SimpleBoundaryScanner">
>         <lst name="defaults">
>           <str name="hl.bs.maxScan">10</str>
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>         </lst>
>       </boundaryScanner>
>
>       <boundaryScanner name="breakIterator"
>                        class="solr.highlight.BreakIteratorBoundaryScanner"
> >
>         <lst name="defaults">
>           <str name="hl.bs.type">WORD</str>
>           <str name="hl.bs.language">en</str>
>           <str name="hl.bs.country">US</str>
>         </lst>
>       </boundaryScanner>
>     </highlighting>
>   </searchComponent>
>
>   <queryResponseWriter name="json" class="solr.JSONResponseWriter">
>     <str name="content-type">text/plain; charset=UTF-8</str>
>   </queryResponseWriter>
>
>     <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"
> startup="lazy"/>
>
>   <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>     <int name="xsltCacheLifetimeSeconds">5</int>
>   </queryResponseWriter>
>
>   <!-- Legacy config for the admin interface -->
>   <admin>
>     <defaultQuery>*:*</defaultQuery>
>   </admin>
>
> </config>
>
>
>
> Solr 8.7.0
>
>
>
> solr 8.7.0 schema.xml
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="articles" version="1.6">
>     <uniqueKey>id</uniqueKey>
>     <!--Define default scorer -->
>     <similarity class="solr.LegacyBM25SimilarityFactory"/>
>
>     <!--Depricated in solr 8 -->
>     <!--<defaultSearchField>text</defaultSearchField> -->
>     <!--<solrQueryParser defaultOperator="AND" /> -->
>
>     <!--Define fieldTypes Trie* has been replaced by *PointField-->
>     <fieldType name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
>     <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
>     <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
>     <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
>     <fieldType name="pdouble" class="solr.DoublePointField" docValues="true" />
>     <fieldType name="pdate" class="solr.DatePointField" omitNorms="true" docValues="true"/>
>
>     <!-- lowercases the entire field value, keeping it as a single token.  -->
>     <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer>
>             <tokenizer class="solr.KeywordTokenizerFactory"/>
>             <filter class="solr.LowerCaseFilterFactory" />
>         </analyzer>
>     </fieldType>
>
>     <!-- Exact text, without word stemming -->
>     <fieldType name="exact_text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
>     <!-- Exact text, case-sensitive, without word stemming -->
>     <fieldType name="exact_text_and_case" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
>         </analyzer>
>     </fieldType>
>
>     <!-- Exact text (without word stemming) but normalized. Used for the headline field -->
>     <fieldType name="exact_text_normalized" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                     catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                     preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>    <analyzer type="query">
>      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
>             <filter class="solr.LowerCaseFilterFactory"/>
>         </analyzer>
>     </fieldType>
>
>     <!-- The default (stemmed) text field for general queries -->
>     <fieldType name="text" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
>         <analyzer type="index">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt" />
>        <filter class="solr.FlattenGraphFilterFactory"/>
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" language="English" />
>         </analyzer>
>         <analyzer type="query">
>             <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>             <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>             <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="0"
>                 catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnNumerics="0"
>                 preserveOriginal="0" splitOnCaseChange="0" types="content-types.txt"  />
>             <filter class="solr.LowerCaseFilterFactory"/>
>             <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
>             <filter class="solr.SnowballPorterFilterFactory" language="English" />
>         </analyzer>
>     </fieldType>
>
>     <!-- General -->
>     <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true" docValues="true"/>
>     <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="django_id" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="lang" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
>
>     <!-- Content -->
>     <field name="headline" type="exact_text_normalized" indexed="true" stored="true" multiValued="false" />
>     <!-- <field name="intro" type="text" indexed="true" stored="false" multiValued="false" /> -->
>     <field name="intro" type="exact_text_normalized" indexed="true" stored="false" multiValued="false" />
>     <field name="text" type="text" indexed="true" stored="false" multiValued="false" />
>     <field name="content" type="text" indexed="false" stored="true" multiValued="false" />
>     <field name="content_fulltext" type="text" stored="false" indexed="true" multiValued="false" />
>     <field name="content_exact" type="exact_text" stored="false" indexed="true" multiValued="false" />               <!-- generated from `text` -->
>     <field name="content_exact_case" type="exact_text_and_case" stored="false" indexed="true" multiValued="false" /> <!-- generated from `text` -->
>
>
>     <!-- Source Data -->
>     <field name="published_at" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="publication_type" type="string" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="feed_id" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
>     <field name="subscription" type="pint" indexed="true" stored="false" docValues="true" />
>     <field name="priority_fetch" type="boolean" indexed="true" stored="true" />
>
>     <!-- Ranking -->
>     <field name="priority" type="pfloat" indexed="true" stored="false" multiValued="false" docValues="true" />
>     <field name="site_rank" type="plong" indexed="true" stored="false" multiValued="false" docValues="true" />
>     <field name="combined_priority_weight" type="pfloat" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="valid_firms" type="plong" indexed="true" stored="false" multiValued="true" docValues="true" />
>
>     <!-- Pre-Tagging of Saved Searches -->
>     <field name="ss" type="plong" indexed="true" stored="false" multiValued="true" docValues="true" />
>     <field name="tags" type="string" indexed="true" stored="true" multiValued="true" docValues="true" />
>     <field name="last_taggable_change" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="tagged_topics" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_about_sources" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
>     <field name="tagged_created_sources" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
>
>     <!-- Event Specific -->
>     <field name="end_date" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
>     <field name="start_date" type="pdate" indexed="true" stored="true" multiValued="false" docValues="true" />
>
>     <!-- Twitter specific -->
>     <field name="tweeter" type="lowercase" indexed="true" stored="true" multiValued="false" />
>
>     <!-- Functional -->
>     <field name="fingerprint" type="string" stored="false" indexed="true" multiValued="false" docValues="true" />
>     <field name="_version_" type="plong" indexed="true" stored="true" docValues="true" />
>
>     <!-- Copy text into content_exact -->
>     <copyField source="text" dest="content_exact" />
>     <copyField source="text" dest="content_exact_case" />
>
>     <!-- Insights -->
>     <field name="has_signal" type="pint" indexed="true" stored="true" multiValued="false"
>            docValues="true" />
>
>     <!-- Industry Entities -->
>     <field name="industry_tags" type="plong" indexed="true" stored="true" multiValued="true" docValues="true" />
>
> </schema>
>
>
>
> solr 8.7.0 solrconfig.xml
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <config>
>   <luceneMatchVersion>8.7.0</luceneMatchVersion>
>   <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
>   <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
>
>   <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
>   <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
>
>   <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
>   <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
>
>   <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-ltr-\d.*\.jar" />
>
>   <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
>   <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
>   <dataDir>${solr.data.dir:}</dataDir>
>   <directoryFactory name="DirectoryFactory"
>                     class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
>
>       <schemaFactory class="ClassicIndexSchemaFactory">
>         </schemaFactory>
>   <codecFactory class="solr.SchemaCodecFactory"/>
>
>   <indexConfig>
>
>         <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
>           <int name="maxMergeAtOnce">10</int>
>           <int name="segmentsPerTier">2</int>
>           <double name="noCFSRatio">0.1</double>
>         </mergePolicyFactory>
>
>     <lockType>${solr.lock.type:native}</lockType>
>
>   </indexConfig>
>
>   <jmx />
>
>   <updateHandler class="solr.DirectUpdateHandler2">
>
>     <updateLog>
>       <str name="dir">${solr.ulog.dir:}</str>
>       <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
>     </updateLog>
>
>      <autoCommit>
>        <maxTime>600000</maxTime>
>        <maxDocs>1000000</maxDocs>
>        <openSearcher>false</openSearcher>
>      </autoCommit>
>
>       <autoSoftCommit>
>         <maxTime>120000</maxTime>
>       </autoSoftCommit>
>
>   </updateHandler>
>
>   <query>
>
>     <maxBooleanClauses>4096</maxBooleanClauses>
>
>     <slowQueryThresholdMillis>100000</slowQueryThresholdMillis>
>
>     <filterCache class="solr.CaffeineCache"
>                  size="3600"
>                  initialSize="2048"
>                  autowarmCount="2048"/>
>
>     <queryResultCache class="solr.CaffeineCache"
>                      size="1024"
>                      initialSize="512"
>                      autowarmCount="512"/>
>
>     <documentCache class="solr.CaffeineCache"
>                    size="4096"
>                    initialSize="1024"
>                    autowarmCount="1024"/>
>
>     <cache name="perSegFilter"
>            class="solr.CaffeineCache"
>            size="10"
>            initialSize="0"
>            autowarmCount="10"
>            regenerator="solr.NoOpRegenerator" />
>
>     <enableLazyFieldLoading>true</enableLazyFieldLoading>
>
>    <queryResultWindowSize>20</queryResultWindowSize>
>
>    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
>
>     <listener event="newSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>       </arr>
>     </listener>
>     <listener event="firstSearcher" class="solr.QuerySenderListener">
>       <arr name="queries">
>         <lst>
>           <str name="q">static firstSearcher warming in solrconfig.xml</str>
>         </lst>
>       </arr>
>     </listener>
>
>     <useColdSearcher>true</useColdSearcher>
>
>     <maxWarmingSearchers>4</maxWarmingSearchers>
>
>   </query>
>
>   <requestDispatcher>
>
>     <requestParsers enableRemoteStreaming="false"
>                     multipartUploadLimitInKB="2048000" />
>
>     <httpCaching never304="true" />
>
>   </requestDispatcher>
>
>   <requestHandler name="/select" class="solr.SearchHandler">
>      <lst name="defaults">
>        <str name="echoParams">explicit</str>
>        <int name="rows">10</int>
>        <str name="df">text</str>
>        <str name="q.op">AND</str>
>        <str name="group">true</str>
>        <str name="group.field">fingerprint</str>
>        <int name="group.limit">6</int>
>        <str name="group.ngroups">true</str>
>        <int name="f.feed_id.facet.mincount">1</int>
>        <int name="f.linked_searches.facet.mincount">1</int>
>        <int name="timeAllowed">120000</int>
>      </lst>
>
>     </requestHandler>
>
>   <requestHandler name="/get" class="solr.RealTimeGetHandler">
>      <lst name="defaults">
>        <str name="omitHeader">true</str>
>        <str name="wt">json</str>
>        <str name="indent">true</str>
>      </lst>
>   </requestHandler>
>
>   <requestHandler name="/export" class="solr.SearchHandler">
>     <lst name="invariants">
>       <str name="rq">{!xport}</str>
>       <str name="wt">xsort</str>
>       <str name="distrib">false</str>
>     </lst>
>
>     <arr name="components">
>       <str>query</str>
>     </arr>
>   </requestHandler>
>
>   <requestHandler name="/update" class="solr.UpdateRequestHandler">
>   </requestHandler>
>
>   <requestHandler name="/update/extract"
>                   startup="lazy"
>                   class="solr.extraction.ExtractingRequestHandler" >
>     <lst name="defaults">
>       <str name="lowernames">true</str>
>       <str name="uprefix">ignored_</str>
>       <str name="captureAttr">true</str>
>       <str name="fmap.a">links</str>
>       <str name="fmap.div">ignored_</str>
>     </lst>
>   </requestHandler>
>
>   <requestHandler name="/analysis/field"
>                   startup="lazy"
>                   class="solr.FieldAnalysisRequestHandler" />
>
>   <requestHandler name="/analysis/document"
>                   class="solr.DocumentAnalysisRequestHandler"
>                   startup="lazy" />
>
>   <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
>     <lst name="invariants">
>       <str name="q">solrpingquery</str>
>     </lst>
>     <lst name="defaults">
>       <str name="echoParams">all</str>
>     </lst>
>   </requestHandler>
>
>   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
>     <lst name="defaults">
>      <str name="echoParams">explicit</str>
>      <str name="echoHandler">true</str>
>     </lst>
>   </requestHandler>
>
>    <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
>
>   <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
>
>     <str name="queryAnalyzerFieldType">textSpell</str>
>
>     <lst name="spellchecker">
>       <str name="name">default</str>
>       <str name="field">name</str>
>       <str name="classname">solr.DirectSolrSpellChecker</str>
>       <str name="distanceMeasure">internal</str>
>       <float name="accuracy">0.5</float>
>       <int name="maxEdits">2</int>
>       <int name="minPrefix">1</int>
>       <int name="maxInspections">5</int>
>       <int name="minQueryLength">4</int>
>       <float name="maxQueryFrequency">0.01</float>
>     </lst>
>
>     <lst name="spellchecker">
>       <str name="name">wordbreak</str>
>       <str name="classname">solr.WordBreakSolrSpellChecker</str>
>       <str name="field">name</str>
>       <str name="combineWords">true</str>
>       <str name="breakWords">true</str>
>       <int name="maxChanges">10</int>
>     </lst>
>
>   </searchComponent>
>
>   <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
>
>   <searchComponent name="clustering"
>                    enable="${solr.clustering.enabled:false}"
>                    class="solr.clustering.ClusteringComponent" >
>     <lst name="engine">
>       <str name="name">default</str>
>       <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
>       <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
>       <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
>       <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
>     </lst>
>     <lst name="engine">
>       <str name="name">stc</str>
>       <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
>     </lst>
>   </searchComponent>
>
>   <requestHandler name="/clustering"
>                   startup="lazy"
>                   enable="${solr.clustering.enabled:false}"
>                   class="solr.SearchHandler">
>     <lst name="defaults">
>       <bool name="clustering">true</bool>
>       <str name="clustering.engine">default</str>
>       <bool name="clustering.results">true</bool>
>       <str name="carrot.title">name</str>
>       <str name="carrot.url">id</str>
>        <str name="carrot.snippet">features</str>
>        <bool name="carrot.produceSummary">true</bool>
>        <bool name="carrot.outputSubClusters">false</bool>
>
>        <str name="defType">edismax</str>
>        <str name="qf">
>          text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
>        </str>
>        <str name="q.alt">*:*</str>
>        <str name="rows">10</str>
>        <str name="fl">*,score</str>
>     </lst>
>     <arr name="last-components">
>       <str>clustering</str>
>     </arr>
>   </requestHandler>
>
>   <searchComponent name="terms" class="solr.TermsComponent"/>
>
>   <searchComponent name="elevator" class="solr.QueryElevationComponent" >
>     <str name="queryFieldType">string</str>
>     <str name="config-file">elevate.xml</str>
>   </searchComponent>
>   <searchComponent class="solr.HighlightComponent" name="highlight">
>     <highlighting>
>       <fragmenter name="gap"
>                   default="true"
>                   class="solr.highlight.GapFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">100</int>
>         </lst>
>       </fragmenter>
>
>       <fragmenter name="regex"
>                   class="solr.highlight.RegexFragmenter">
>         <lst name="defaults">
>           <int name="hl.fragsize">70</int>
>           <float name="hl.regex.slop">0.5</float>
>           <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
>         </lst>
>       </fragmenter>
>
>       <formatter name="html"
>                  default="true"
>                  class="solr.highlight.HtmlFormatter">
>         <lst name="defaults">
>           <str name="hl.simple.pre"><![CDATA[<em>]]></str>
>           <str name="hl.simple.post"><![CDATA[</em>]]></str>
>         </lst>
>       </formatter>
>
>       <encoder name="html"
>                class="solr.highlight.HtmlEncoder" />
>
>       <fragListBuilder name="simple"
>                        class="solr.highlight.SimpleFragListBuilder"/>
>
>       <fragListBuilder name="single"
>                        class="solr.highlight.SingleFragListBuilder"/>
>
>       <fragListBuilder name="weighted"
>                        default="true"
>                        class="solr.highlight.WeightedFragListBuilder"/>
>       <fragmentsBuilder name="default"
>                         default="true"
>                         class="solr.highlight.ScoreOrderFragmentsBuilder">
>       </fragmentsBuilder>
>
>       <fragmentsBuilder name="colored"
>                         class="solr.highlight.ScoreOrderFragmentsBuilder">
>         <lst name="defaults">
>           <str name="hl.tag.pre"><![CDATA[
>                <b style="background:yellow">,<b style="background:lawgreen">,
>                <b style="background:aquamarine">,<b style="background:magenta">,
>                <b style="background:palegreen">,<b style="background:coral">,
>                <b style="background:wheat">,<b style="background:khaki">,
>                <b style="background:lime">,<b style="background:deepskyblue">]]></str>
>           <str name="hl.tag.post"><![CDATA[</b>]]></str>
>         </lst>
>       </fragmentsBuilder>
>
>       <boundaryScanner name="default"
>                        default="true"
>                        class="solr.highlight.SimpleBoundaryScanner">
>         <lst name="defaults">
>           <str name="hl.bs.maxScan">10</str>
>           <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
>         </lst>
>       </boundaryScanner>
>
>       <boundaryScanner name="breakIterator"
>                        class="solr.highlight.BreakIteratorBoundaryScanner">
>         <lst name="defaults">
>           <str name="hl.bs.type">WORD</str>
>           <str name="hl.bs.language">en</str>
>           <str name="hl.bs.country">US</str>
>         </lst>
>       </boundaryScanner>
>     </highlighting>
>   </searchComponent>
>
>   <queryResponseWriter name="json" class="solr.JSONResponseWriter">
>     <str name="content-type">text/plain; charset=UTF-8</str>
>   </queryResponseWriter>
>
>     <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"/>
>
>   <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
>     <int name="xsltCacheLifetimeSeconds">5</int>
>   </queryResponseWriter>
>
>   <admin>
>     <defaultQuery>*:*</defaultQuery>
>   </admin>
>
> </config>
>
>
>
> Solr Query examples.
>
>
>
> *:*
>
>
>
>
>
>
>
> {!boost
> b=sum(product(99999999999,has_signal),product(pow(priority,10),pow(recip(abs(ms(NOW/HOUR,published_at)),2.77e-09,1,1),5)))}((tags:Real_Est
> OR (((headline:"real estate"^99999999999 OR headline:"commercial
> development"^99999999999 OR headline:"commercial developer"^99999999999 OR
> "Real Estate" OR "Real Property" OR "property law" OR "Property Deal" OR
> "Property Sale" OR "purchase of land" OR "Homeowners Association" OR
> content_exact:"HOA" OR "Board of Realtors" OR content_exact:"Property
> Development" OR "CAP Rate" OR content_exact:"Housing Demand" OR "CRE
> Finance Council" OR "Housing Supply" OR "Property Tax" OR
> content_exact:"FHA" OR content_exact:"Fully Leased" OR
> content_exact:"Represented the Buyer" OR content_exact:"Design/Build" OR
> "Ad Valorem" OR "Anchor Tenant" OR "Build to suit" OR "Certificate of
> Occupancy" OR "Eminent Domain" OR "new office building" OR "new office
> development" OR "Adverse possession" OR "Allodial title" OR "planning law"
> OR "planning permission" OR "housebuilder" OR "housebiilding" OR
> content_exact:"housebuilder" OR "Fee Simple" OR "Fee tail" OR "Quiet Title"
> OR "Restraint on alienation" OR "Rule in Shelley" OR "Doctrine of worthier
> title" OR "Worthier Title Doctrine" OR content_exact:"Easement" OR
> "Equitable servitude")) OR ((tagged_topics:(27) OR
> tagged_about_sources:(27) OR tagged_created_sources:(27)) OR
> (tagged_topics:(107263) OR tagged_about_sources:(107263) OR
> tagged_created_sources:(107263)) OR (((content_exact:"Office Building" OR
> "Office Complex" OR "Office Tower" OR "Office Space" OR "Office Center" OR
> "Office Campus" OR "Class A Office" OR "Class B Office" OR "Class C Office"
> OR content_exact:"Class A Building" OR content_exact:"Class B Building" OR
> content_exact:"Class C Building" OR content_exact:"Class A Tower" OR
> content_exact:"Class B Tower" OR content_exact:"Class C Tower" OR
> content_exact:"corporate office" OR "office property" OR "office
> properties"))) OR (tagged_topics:(119) OR tagged_about_sources:(119) OR
> tagged_created_sources:(119)))) AND NOT ("intellectual property" OR "plan
> testimonial")) AND ((((tags:"geo_morocco"^0.9 OR *:*) OR
> (content_exact:"March Madness"^0.19999 OR headline:"recognizes"^0.19999 OR
> headline:("holiday sale" OR "tech deals" OR "Black Friday Sale" OR "Black
> Friday deals"~5 OR "Market Analysis" OR wildfire OR arrested OR stabbed OR
> "celebrate birthday"~5 OR "market expected boom"~5 OR "what to expect" OR
> "where to find")^0.199999999999 OR content_exact:"state championship
> game"^0.19999 OR content_exact:"playstation 4"^0.1999999999999 OR
> content_exact:"recover after shock"^0.19999 OR content_exact:"losing
> streak"^0.19999 OR content_exact:"with win over"^0.19999 OR
> headline:(content_exact:"Islamic state")^0.19999 OR
> headline:("accident")^0.1999999999 OR
> headline:(content_exact:"badgers")^0.19999 headline:("part time" OR "full
> time" OR "accuweather" OR "snowstorm" OR PHOTOS)^0.199999999999 OR
> headline:(content_exact:"investor alert")^0.19999999999999 OR
> headline:(content_exact:"stock")^0.19999999 OR
> headline:(content_exact:"cuts holdings" OR content_exact:"raises holdings"
> OR content_exact:"reduces holdings")^0.19999999 OR
> headline:("ResearchAndMarkets.com")^0.19999 OR
> headline:(content_exact:"conference")^0.19999 OR
> headline:(content_exact:"of the year")^0.19999 OR
> headline:(content_exact:"rankings")^0.19999 OR ("edged
> higher")^0.1999999999999999 OR ("edged lower")^0.1999999999999999 OR
> headline:(content_exact:"blue devils")^0.19999 OR
> headline:(content_exact:"shares climb")^0.19999 OR
> headline:(content_exact:"volunteer")^0.19999999 OR
> headline:(content_exact:"murderer")^0.19999 OR
> headline:(content_exact:"murdered")^0.19999 OR
> headline:(content_exact:"hurricane")^0.19999 OR
> headline:(content_exact:"tornado")^0.19999 OR
> headline:(content_exact:"storm")^0.19999 OR headline:(content_exact:"found
> dead")^0.19999 OR headline:(content_exact:"celebrity")^0.19999999 OR
> headline:(content_exact:"registration underway")^0.19 OR
> headline:(content_exact:"boko haram")^0.19999999 OR
> headline:(content_exact:"police arrest")^0.19999 OR "human remains"^0.1999
> OR "slaying"^0.1999 OR "home prices"^0.1999 OR "transfer news"^0.1999 OR
> headline:("militia")^0.19999999 OR (content_exact:"shooting")^0.19999 OR
> headline:("ISIS")^0.19999999 OR
> headline:(content_exact:"prostitution")^0.19999999 OR
> headline:(content_exact:"drugs")^0.19999 OR
> content_exact:"winger"^0.19999999 OR "happy birthday"^0.19999 OR "happy
> easter"^0.19999 OR "merry christmas"^0.19999 OR "reported at trading
> volume"^0.199999 OR "most active stocks"^0.199999 OR "loss
> narrows"^0.199999 OR "earnings conference"^0.199999 OR "put
> options"^0.199999 OR "trading range"^0.199999 OR "week low"^0.199999 OR
> "week high"^0.199999 OR "neutral"^0.199999 OR "downgraded"^0.199999 OR
> "upgraded"^0.199999 OR "average rating"^0.199999 OR "financial
> report"^0.19999999 OR "quarterly"^0.199999 OR "q1 loss"^0.19 OR "q3
> loss"^0.19999999 OR "q4 loss"^0.19999999 OR "q2 loss"^0.19999999 OR
> "financial results"^0.1999999 OR "upgrades"^0.19999999 OR
> "upgraded"^0.19999 OR "downgrades"^0.19999 OR "downgraded"^0.19999 OR
> "consensus estimate"^0.19999 OR "analyst estimate"^0.19999 OR "consensus
> analyst estimate"^0.199999 OR "q1 results"^0.19999 OR "q2 results"^0.19999
> OR "q3 results"^0.19999999 OR "q4 results"^0.19999 OR
> content_exact:"EPS"^0.19999999 OR "fiscal results"^0.19999 OR "financial
> results"^0.1999 OR "profits up"^0.19999999 OR "profit down"^0.19999 OR
> "quarter report"^0.19999 OR "quarterly report"^0.19 OR "earnings"^0.19999
> OR "quarterly results"^0.19999999 OR "earnings report"^0.19999999 OR
> "quarterly earnings"^0.19999 OR content_exact:"narrows"^0.19999 OR
> content_exact:"quarter loss"^0.19999999 OR content_exact:"quarterly
> losses"^0.19999 OR content_exact:"quarterly loss"^0.19999 OR
> content_exact:"quarter results"^0.19999999 OR content_exact:"report of
> earnings"^0.19999999 OR "earnings release"^0.19999999 OR "research
> reports"^0.19999999 OR "target raised"^0.19999999 OR "try any of our
> foolish"^0.19999999 OR "jim cramer"^0.19999999 OR
> content_exact:"jumps"^0.19 OR headline:(content_exact:"coverage")^0.1999999
> OR headline:("rose stock"~5)^0.1999999999 OR headline:("declined
> stock"~5)^0.1999999999 OR headline:("FOREX")^0.199999999 OR
> content_exact:"unloads"^0.19999999 OR "shares drops"^0.19999999 OR
> "research and markets"^0.19999999 OR headline:("price target")^0.1999999999
> OR headline:("early movers")^0.1999999999 OR
> headline:("rating")^0.1999999999 OR headline:("stock")^0.1999999999 OR
> headline:("stocks")^0.199999999 OR "U.S. stocks were lower"^0.1999999 OR
> headline:("slides")^0.199999999 OR headline:("wall st")^0.199999999 OR
> headline:("indexes")^0.199999999 OR headline:("financial
> results")^0.1999999999999999 OR headline:("closing bell")^0.19 OR
> headline:(content_exact:"higher volume")^0.1999 OR headline:("trading
> lower")^0.1999 OR headline:(content_exact:"research and markets")^0.1999999
> OR (content_exact:"mid-day changers")^0.1999999 OR (headline:"a
> share")^0.1999999 OR (headline:"insider buying")^0.1999999 OR
> (headline:"short interest")^0.1999999 OR (headline:"shares of")^0.1999999
> OR (headline:"market movers")^0.1999999 OR
> (headline:"analyst")^0.19999999999 OR (headline:"analysts")^0.19999999999
> OR (headline:"dow spikes")^0.19999999999 OR (headline:"dow
> movers")^0.1999999 OR (headline:"bidness")^0.1999999)) AND NOT
> ((headline:("market report" OR "market by offering" OR "market
> segmentation"~6 OR "applications forecast" OR "market tremendous growth"~8
> OR "market significant growth"~8 OR "market status" OR "forecast 2019"~4 OR
> "forecast 2020"~4 OR "forecast 2021"~4 OR "forecast 2022"~4 OR "forecast
> 2023"~4 OR "forecast 2024"~4 OR "forecast 2025"~4 OR "forecast 2026"~4 OR
> "forecast 2027"~4 OR "valuation reach"~4 OR "market grow during"~5 OR
> "market survey report"~5 OR "holding cut by") OR headline:("investing
> advise" OR "market to witness" OR "position decreased by" OR "increases
> stake" OR "market study" OR "market size" OR "global forecast" OR "stock
> analysts" OR "sentiment shift") OR headline:("global industry") OR
> headline:("dow gains") OR headline:("forecast industry"~5 OR "worldwide
> forecast"~7 OR "market analysis"~5) OR headline:("researchandmarkets.com")
> OR headline:("morning movers") OR headline:("markets now") OR
> headline:("market trends"~5) OR headline:("market estimated valued"~9) OR
> headline:("market projected to grow") OR headline:("market expected to
> grow"~6) OR headline:("falls to low"~6) OR headline:("Zacks investment
> research") OR headline:("SWOT analysis") OR "equal weight" OR
> headline:("brokerage recommendations") OR headline:("ratings outlook") OR
> headline:("financial stocks") OR headline:("equities research") OR
> headline:("given average recommendation") OR headline:("from analysts") OR
> headline:("target price") OR "Barclays target price"~15 OR
> headline:("Consensus Recommendation") OR headline:("Coverage initiated") OR
> headline:("Wall street opens lower") OR headline:("Wall street pulls back")
> OR headline:("Wall street advances") OR headline:("Wall street opens
> higher") OR headline:("REPORTS ACQUISITION BY DIRECTOR") OR
> headline:("REPORTS ACQUISITION BY Senior") OR headline:("REPORTS
> ACQUISITION BY VP") OR headline:("REPORTS ACQUISITION BY executive") OR
> headline:("REPORTS ACQUISITION BY CEO") headline:("cut sell"~3) OR
> headline:("lowered sell"~3) OR headline:("PT lowered") OR headline:("cut
> neutral"~3) OR headline:("lowered neutral"~3) OR headline:("cut hold"~3) OR
> headline:("lowered hold"~3) OR headline:("hold rating"~3) OR
> headline:("raised buy"~4) OR headline:("raised to") OR headline:("lowered
> buy"~4) OR headline:("rating buy"~4) OR headline:("rating add"~4) OR
> headline:("lowered underperform"~3) OR headline:("outperform") OR
> headline:("downgraded by") OR headline:("upgraded by") OR
> headline:("downgraded to") OR headline:("upgraded to") OR
> headline:("announces dividend"~3) OR headline:("plans dividend"~3)
> headline:("issues dividend"~3) OR headline:("shares sold") OR
> headline:("shares bought") OR ("shares reached high"~9) OR "research note
> issued to investors" OR "move per share"~8) OR "apply now" OR
> "Undergraduate degree or equivalent"~6 OR "your cv" OR "Add my CV to the"
> OR "We are currently looking for a" OR "a competitive salary" OR
> headline:("roadshow" OR "terms of service violation") OR headline:("best
> deals"~4 OR "thanksgiving travel"~4 OR "thanksgiving guide"~4 OR "happy
> thanksgiving" OR "best of 2018"~5 OR "black friday hours"~5 OR "black
> Friday freebies"~5 OR "stores open thanksgiving"~5 OR "stores open
> christmas"~5 OR "cyber monday" OR "black friday deal"~8 OR "thanksgiving
> dinner" OR santa OR "wedding announcements" OR "holiday sales" OR "white
> nationalist" OR "shooting" OR "mall shootings" OR "stabbing" OR "holiday
> gift" OR "family killed"~7 OR "killed by car" OR "apply now" OR obituary OR
> "entry level" OR "support worker" OR "a career within" OR "recipe" OR
> "Exclusive opportunity" OR "content acquisition")))) AND NOT
> ((feed_id:"101505" OR feed_id:"95622" OR feed_id:"104135" OR
> feed_id:"95624" OR feed_id:"6537" OR feed_id:"104138" OR feed_id:"104140"
> OR feed_id:"95629" OR feed_id:"92622" OR feed_id:"104366" OR
> feed_id:"99342" OR feed_id:"82520" OR feed_id:"94172" OR feed_id:"11967"))
> AND ((tags:content_us^999999999999) OR *:*) AND (((tags:"news_major"^99) OR
> feed_id:"108735"^99999999 OR feed_id:"68677"^99999999 OR
> feed_id:"89672"^99999999 OR feed_id:"94600"^99999999 OR
> feed_id:"95627"^99999999 OR feed_id:"11501"^99999999 OR
> feed_id:"3470"^99999999 OR feed_id:"53326"^99999999 OR
> feed_id:"42417"^99999999 OR feed_id:"43069"^99999999 OR
> feed_id:"108734"^99999999 OR feed_id:"75797"^99999999 OR
> feed_id:"107094"^99999999 OR feed_id:"48503"^99999999 OR
> feed_id:"105598"^99999999 OR feed_id:"11675"^99999999 OR
> feed_id:"28476"^99999999 OR feed_id:"57757"^99999999 OR
> feed_id:"99741"^99999999 OR feed_id:"70591"^99999999) OR *:*)) /* None */
>
>
>
>
>
>
>
>
>
> Filter query parameters:
>
> (valid_firms:(0 OR 1) OR (*:* AND -valid_firms:[* TO *]))
>
>
>
> publication_type:(news OR blog OR press_release OR publication)
>
>
>
> lang:(en OR es)
>
>
>
> published_at:["2021-04-01T07:00:00Z" TO "2021-04-15T16:42:28.150394Z"]
>
>
>
> OLD cluster query time
>
> "*QTime*":1209,
>
>
>
> NEW cluster query time – almost twice as long
>
> "*QTime*":2316,
>
>
>
> Thank you in advance for any help you can provide.
>
>
>
>
>
> [image: Logo Description automatically generated]
>
> a MODERN GOVERNANCE company
>
> *Russell Bahr­­*
>
> *Lead Infrastructure Engineer*
>
> 543 NW York Drive | Suite 100 | Bend, OR 97703
> Direct: 541-306-3271 | rbahr@manzama.com | www.manzama.com
>