elasticsearch 为什么queryResultCache查找在Solr中没有增加?

w1e3prcc  于 2023-03-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(104)

有谁能帮我们弄清楚为什么Solr没有在queryResultCache中缓存我们的查询吗?我们已经尝试用下面的查询在Solr上做了一个负载测试:

solr.log.10:2023-03-13 08:38:05.584 INFO  (qtp346049017-12333) [c:products s:shard1 r:core_node20 x:products_shard1_replica_p15] o.a.s.c.S.Request [products_shard1_replica_p15]  webapp=/solr path=/select params={df=_text_&distrib=false&fl=id&fl=score&shards.purpose=1064964&fsv=true&fq=channel_identifier:63ee06b7a450d431b25462ed&fq=is_available:True&fq=image_nature:("standard"+OR+"substandard"+OR+"default")&fq=product_online_date:[*+TO+2023-03-13T00:00:00Z]&shard.url=http://10.2.81.74:8983/solr/products_shard1_replica_p15/|http://10.2.17.170:8983/solr/products_shard1_replica_p17/|http://10.2.145.18:8983/solr/products_shard1_replica_p16/|http://10.2.17.41:8983/solr/products_shard1_replica_t14/|http://10.2.17.117:8983/solr/products_shard1_replica_t13/&rid=10.2.81.74-23846&json={"query":+"*:*",+"facet":+{"min_price_effective":+{"type":+"query",+"facet":+{"min":+"min(currency(min_price_effective,INR))",+"max":+"max(currency(min_price_effective,INR))"},+"domain":+{"excludeTags":+"min_price_effective"}},+"departments":+{"type":+"terms",+"field":+"departments",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"departments"}},+"is_custom_order":+{"type":+"terms",+"field":+"is_custom_order",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"is_custom_order"}},+"sizes":+{"type":+"terms",+"field":+"sizes",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"sizes"}},+"discount":+{"type":+"query",+"facet":+{"min":+"min(discount)",+"max":+"max(discount)"},+"domain":+{"excludeTags":+"discount"}},+"brand_slug":+{"type":+"terms",+"field":+"brand_slug",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"brand_slug"}},+"rating":+{"type":+"range",+"field":+"rating",+"start":+1,+"end":+4,+"gap":+1,+"other":+["after",+"before"],+"domain":+{"excludeTags":+"rating"}},+"image_nature":+{"type":+"terms",+"field":+"image_nature",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"image_nature"}},+"is_set":+{"type":+"terms",+"field":+"is_set",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"is_set"}},+"l3_category_slugs":+{"type":+"terms",+"field":+"l3_category_slugs",+"mincount":+1,+"limit":+-1,+"domain":+{"excludeTags":+"l3_category_slugs"}},+"size_depth":+{"type":+"query",+"facet":+{"min":+"min(size_depth)",+"max":+"max(size_depth)"},+"domain":+{"excludeTags":+"size_depth"}}},+"params":+{"df":+"_text_",+"_route_":+"63ee06b7a450d431b25462ed",+"debug.explain.structured":+"true",+"debugQuery":+"on",+"shards.preference":+"replica.location:local",+"cursorMark":+"*",+"start":+0,+"rows":+12},+"fields":+["*+score"],+"filter":+["channel_identifier:63ee06b7a450d431b25462ed",+"is_available:True",+"image_nature:(\"standard\"+OR+\"substandard\"+OR+\"default\")",+"product_online_date:[*+TO+2023-03-13T00:00:00Z]"],+"sort":+"popularity+desc+,id+asc"}&shards.preference=replica.location:local&wt=javabin&_route_=63ee06b7a450d431b25462ed&debug=false&debug=timing&debug=track&_facet_={}&start=0&sort=popularity+desc+,id+asc&rows=12&debug.explain.structured=true&version=2&q=*:*&omitHeader=false&requestPurpose=GET_TOP_IDS,SET_TERM_STATS&cursorMark=*&NOW=1678696681630&isShard=true&debugQuery=false} hits=1233054 status=0 QTime=1040

但是我们的缓存统计页面没有增加查询次数?知道为什么吗?

这是我们的solrconfig.xml

<config>

<luceneMatchVersion>8.1.1</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:../../../..}/contrib/velocity/lib" regex=".*\.jar"/>
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar"/>

<dataDir>${solr.data.dir:}</dataDir>
<!--
 The DirectoryFactory to use for indexes.

         solr.StandardDirectoryFactory is filesystem
         based and tries to pick the best implementation for the current
         JVM and platform.  solr.NRTCachingDirectoryFactory, the default,
         wraps solr.StandardDirectoryFactory and caches small files in memory
         for better NRT performance.

         One can force a particular implementation via solr.MMapDirectoryFactory,
         solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.

         solr.RAMDirectoryFactory is memory based and not persistent.
      
-->
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>

<codecFactory class="solr.SchemaCodecFactory"/>

<indexConfig>

<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>
<maxDocs>10000</maxDocs>
<maxTime>30000</maxTime>
<maxSize>512m</maxSize>
<openSearcher>false</openSearcher>
</autoCommit>
<!--
 softAutoCommit is like autoCommit except it causes a
             'soft' commit which only ensures that changes are visible
             but does not ensure that data is synced to disk.  This is
             faster and more near-realtime friendly than a hard commit.
          
-->
<autoSoftCommit>
<maxTime>2000</maxTime>
</autoSoftCommit>
<!--
 Update Related Event Listeners

             Various IndexWriter related events can trigger Listeners to
             take actions.

             postCommit - fired after every commit or optimize command
             postOptimize - fired after every optimize command
          
-->
</updateHandler>

<query>

<maxBooleanClauses>1024</maxBooleanClauses>

<filterCache class="solr.FastLRUCache" maxRamMB="${solr.filterCache.size:512}" autowarmCount="150000"/>
<!--
 Query Result Cache

             Caches results of searches - ordered lists of document ids
             (DocList) based on a query, a sort, and the range of documents requested.
             Additional supported parameter by LRUCache:
                maxRamMB - the maximum amount of RAM (in MB) that this cache is allowed
                           to occupy
          
-->
<!--
        <queryResultCache class="solr.LRUCache" size="${solr.queryResultCache.size:512}" initialSize="${solr.queryResultCache.initialSize:512}" autowarmCount="0"/>
-->
<queryResultCache class="solr.LRUCache" maxRamMB="${solr.queryResultCache.size:512}"/>

<documentCache class="solr.LRUCache" size="${solr.documentCache.size:1024}" initialSize="1024"/>
<!-- custom cache currently used by block join -->
<cache name="perSegFilter" class="solr.search.LRUCache" size="10" initialSize="0" autowarmCount="10" regenerator="solr.NoOpRegenerator"/>

<enableLazyFieldLoading>true</enableLazyFieldLoading>

<queryResultWindowSize>20</queryResultWindowSize>
<!--
 Maximum number of documents to cache for any entry in the
             queryResultCache.
          
-->
<queryResultMaxDocsCached>200</queryResultMaxDocsCached>

<listener event="newSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<!--

                   <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
                   <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
                  
-->
</arr>
</listener>
<listener event="firstSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<!--

                <lst>
                  <str name="q">static firstSearcher warming in solrconfig.xml</str>
                </lst>
                
-->
</arr>
</listener>
<!--
 Use Cold Searcher

             If a search request comes in and there is no current
             registered searcher, then immediately register the still
             warming searcher and use it.  If "false" then all requests
             will block until the first searcher is done warming.
          
-->
<useColdSearcher>false</useColdSearcher>
</query>
<!--
 Request Dispatcher

         This section contains instructions for how the SolrDispatchFilter
         should behave when processing requests for this SolrCore.

      
-->
<requestDispatcher>
<httpCaching never304="true"/>

</requestDispatcher>
<!--
 Request Handlers

         http://wiki.apache.org/solr/SolrRequestHandler

         Incoming queries will be dispatched to a specific handler by name
         based on the path specified in the request.

         If a Request Handler is declared with startup="lazy", then it will
         not be initialized until the first request that uses it.

      
-->
<!--
 SearchHandler

         http://wiki.apache.org/solr/SearchHandler

         For processing Search Queries, the primary Request Handler
         provided with Solr is "SearchHandler" It delegates to a sequent
         of SearchComponents (see below) and supports distributed
         queries across multiple shards
      
-->
<requestHandler name="/select" class="solr.SearchHandler">
<!--
 default values for query parameters can be specified, these
             will be overridden by parameters in the request
          
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<!--
 Default search field
               <str name="df">text</str>
              
-->
<!--
 Change from JSON to XML format (the default prior to Solr 7.0)
               <str name="wt">xml</str>
              
-->
</lst>
</requestHandler>
<!--
 A request handler that returns indented JSON by default 
-->
<requestHandler name="/query" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="wt">json</str>
<str name="indent">true</str>
</lst>
</requestHandler>

<requestHandler name="/browse" class="solr.SearchHandler" useParams="query,facets,velocity,browse">
<lst name="defaults">
<str name="echoParams">explicit</str>
</lst>
</requestHandler>
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">_text_</str>
</lst>
</initParams>

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

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text_general</str>

<lst name="spellchecker">
<str name="name">default</str>
<str name="field">_text_</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<!--
 the spellcheck distance measure used, the default is the internal levenshtein 
-->
<str name="distanceMeasure">internal</str>
<!--
 minimum accuracy needed to be considered a valid spellcheck suggestion 
-->
<float name="accuracy">0.5</float>
<!--
 the maximum #edits we consider when enumerating terms: can be 1 or 2 
-->
<int name="maxEdits">2</int>
<!-- the minimum shared prefix when enumerating terms -->
<int name="minPrefix">1</int>
<!-- maximum number of inspections per result. -->
<int name="maxInspections">5</int>
<!--
 minimum length of a query term to be considered for correction 
-->
<int name="minQueryLength">4</int>
<!--
 maximum threshold of documents a query term can appear to be considered for correction 
-->
<float name="maxQueryFrequency">0.01</float>
<!--
 uncomment this to require suggestions to occur in 1% of the documents
              <float name="thresholdTokenFrequency">.01</float>
            
-->
</lst>
<!--
 a spellchecker that can break or combine words.  See "/spell" handler below for usage 
-->
<!--

        <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>
<!--
 A request handler for demonstrating the spellcheck component.

         NOTE: This is purely as an example.  The whole purpose of the
         SpellCheckComponent is to hook it into the request handler that
         handles your normal user queries so that a separate request is
         not needed to get suggestions.

         IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
         NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!

         See http://wiki.apache.org/solr/SpellCheckComponent for details
         on the request parameters.
      
-->
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<!--
 Solr will use suggestions from both the 'default' spellchecker
                 and from the 'wordbreak' spellchecker and combine them.
                 collations (re-written queries) can include a combination of
                 corrections from both spellcheckers 
-->
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck">on</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.alternativeTermCount">5</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">10</str>
<str name="spellcheck.maxCollations">5</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
<!--
 Term Vector Component

         http://wiki.apache.org/solr/TermVectorComponent
      
-->
<searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
<!--
 A request handler for demonstrating the term vector component

         This is purely as an example.

         In reality you will likely want to add the component to your
         already specified request handlers.
      
-->
<requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<bool name="tv">true</bool>
</lst>
<arr name="last-components">
<str>tvComponent</str>
</arr>
</requestHandler>
<!--
 Clustering Component. (Omitted here. See the default Solr example for a typical configuration.) 
-->
<!--
 Terms Component

         http://wiki.apache.org/solr/TermsComponent

         A component to return terms and document frequency of those
         terms
      
-->
<searchComponent name="terms" class="solr.TermsComponent"/>
<!--
 A request handler for demonstrating the terms component 
-->
<requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<bool name="terms">true</bool>
<bool name="distrib">false</bool>
</lst>
<arr name="components">
<str>terms</str>
</arr>
</requestHandler>
<!--
 A request handler for handling duplicate documents 
-->
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">dedupe</str>
</lst>
</requestHandler>
<!--
 Query Elevation Component

         http://wiki.apache.org/solr/QueryElevationComponent

         a search component that enables you to configure the top
         results for a given query regardless of the normal lucene
         scoring.
      
-->
<searchComponent name="elevator" class="solr.QueryElevationComponent">
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
</searchComponent>
<!--
 A request handler for demonstrating the elevator component 
-->
<requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">explicit</str>
</lst>
<arr name="last-components">
<str>elevator</str>
</arr>
</requestHandler>
<!--
 Highlighting Component

         http://wiki.apache.org/solr/HighlightingParameters
      
-->
<searchComponent class="solr.HighlightComponent" name="highlight">
<highlighting>
<!-- Configure the standard fragmenter -->
<!--
 This could most likely be commented out in the "default" case 
-->
<fragmenter name="gap" default="true" class="solr.highlight.GapFragmenter">
<lst name="defaults">
<int name="hl.fragsize">100</int>
</lst>
</fragmenter>
<!--
 A regular-expression-based fragmenter
                 (for sentence extraction)
              
-->
<fragmenter name="regex" class="solr.highlight.RegexFragmenter">
<lst name="defaults">
<!--
 slightly smaller fragsizes work better because of slop 
-->
<int name="hl.fragsize">70</int>
<!-- allow 50% slop on fragment sizes -->
<float name="hl.regex.slop">0.5</float>
<!-- a basic sentence pattern -->
<str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
</lst>
</fragmenter>
<!-- Configure the standard formatter -->
<formatter name="html" default="true" class="solr.highlight.HtmlFormatter">
<lst name="defaults">
<str name="hl.simple.pre"><em></str>
<str name="hl.simple.post"></em></str>
</lst>
</formatter>
<!-- Configure the standard encoder -->
<encoder name="html" class="solr.highlight.HtmlEncoder"/>
<!-- Configure the standard fragListBuilder -->
<fragListBuilder name="simple" class="solr.highlight.SimpleFragListBuilder"/>
<!-- Configure the single fragListBuilder -->
<fragListBuilder name="single" class="solr.highlight.SingleFragListBuilder"/>
<!-- Configure the weighted fragListBuilder -->
<fragListBuilder name="weighted" default="true" class="solr.highlight.WeightedFragListBuilder"/>
<!-- default tag FragmentsBuilder -->
<fragmentsBuilder name="default" default="true" class="solr.highlight.ScoreOrderFragmentsBuilder">
<!--

                <lst name="defaults">
                  <str name="hl.multiValuedSeparatorChar">/</str>
                </lst>
                
-->
</fragmentsBuilder>
<!-- multi-colored tag FragmentsBuilder -->
<fragmentsBuilder name="colored" class="solr.highlight.ScoreOrderFragmentsBuilder">
<lst name="defaults">
<str name="hl.tag.pre">
<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"></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">.,!? </str>
</lst>
</boundaryScanner>
<boundaryScanner name="breakIterator" class="solr.highlight.BreakIteratorBoundaryScanner">
<lst name="defaults">
<!--
 type should be one of CHARACTER, WORD(default), LINE and SENTENCE 
-->
<str name="hl.bs.type">WORD</str>
<!--
 language and country are used when constructing Locale object.  
-->
<!--
 And the Locale object will be used when getting instance of BreakIterator 
-->
<str name="hl.bs.language">en</str>
<str name="hl.bs.country">US</str>
</lst>
</boundaryScanner>
</highlighting>
</searchComponent>

<updateProcessor class="solr.UUIDUpdateProcessorFactory" name="uuid"/>
<updateProcessor class="solr.RemoveBlankFieldUpdateProcessorFactory" name="remove-blank"/>
<updateProcessor class="solr.FieldNameMutatingUpdateProcessorFactory" name="field-name-mutating">
<str name="pattern">[^\w-\.]</str>
<str name="replacement">_</str>
</updateProcessor>
<updateProcessor class="solr.ParseBooleanFieldUpdateProcessorFactory" name="parse-boolean"/>
<updateProcessor class="solr.ParseLongFieldUpdateProcessorFactory" name="parse-long"/>
<updateProcessor class="solr.ParseDoubleFieldUpdateProcessorFactory" name="parse-double"/>
<updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
<arr name="format">
<str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>
<str>yyyy-MM-dd'T'HH:mm:ss,SSS</str>
<str>yyyy-MM-dd'T'HH:mm:ssZ</str>
<str>yyyy-MM-dd'T'HH:mm:ss</str>
<str>yyyy-MM-dd'T'HH:mmZ</str>
<str>yyyy-MM-dd'T'HH:mm</str>
<str>yyyy-MM-dd HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss.SSS</str>
<str>yyyy-MM-dd HH:mm:ss,SSS</str>
<str>yyyy-MM-dd HH:mm:ssZ</str>
<str>yyyy-MM-dd HH:mm:ss</str>
<str>yyyy-MM-dd HH:mmZ</str>
<str>yyyy-MM-dd HH:mm</str>
<str>yyyy-MM-dd</str>
</arr>
</updateProcessor>
<updateProcessor class="solr.AddSchemaFieldsUpdateProcessorFactory" name="add-schema-fields">
<lst name="typeMapping">
<str name="valueClass">java.lang.String</str>
<str name="fieldType">text_general</str>
<lst name="copyField">
<str name="dest">*_str</str>
<int name="maxChars">256</int>
</lst>
<!--
 Use as default mapping instead of defaultFieldType 
-->
<bool name="default">true</bool>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Boolean</str>
<str name="fieldType">booleans</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.util.Date</str>
<str name="fieldType">pdates</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Long</str>
<str name="valueClass">java.lang.Integer</str>
<str name="fieldType">plongs</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Number</str>
<str name="fieldType">pdoubles</str>
</lst>
</updateProcessor>
<!--
 The update.autoCreateFields property can be turned to false to disable schemaless mode 
-->
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}" processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
<!--
 Deduplication

         An example dedup update processor that creates the "id" field
         on the fly based on the hash code of some other fields.  This
         example has overwriteDupes set to false since we are using the
         id field as the signatureField and Solr will maintain
         uniqueness based on that anyway.

      
-->
<updateRequestProcessorChain name="dedupe">
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">signatureField</str>
<bool name="overwriteDupes">false</bool>
<str name="fields">item_id,channel_identifier</str>
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

<queryResponseWriter name="json" class="solr.JSONResponseWriter">
<!--
 For the purposes of the tutorial, JSON responses are written as
         plain text so that they are easy to read in *any* browser.
         If you expect a MIME type of "application/json" just remove this override.
        
-->
<str name="content-type">text/plain; charset=UTF-8</str>
</queryResponseWriter>
<!--

       Custom response writers can be declared as needed...
      
-->
<queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
<str name="template.base.dir">${velocity.template.base.dir:}</str>
<str name="solr.resource.loader.enabled">${velocity.solr.resource.loader.enabled:true}</str>
<str name="params.resource.loader.enabled">${velocity.params.resource.loader.enabled:false}</str>
</queryResponseWriter>
<!--
 XSLT response writer transforms the XML output by any xslt file found
         in Solr's conf/xslt directory.  Changes to xslt files are checked for
         every xsltCacheLifetimeSeconds.
      
-->
<queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>

</config>
ltskdhd1

ltskdhd11#

看起来您还没有在Solr配置中该高速缓存:https://solr.apache.org/guide/solr/latest/configuration-guide/caches-warming.html#query-result-cache
您应该将其添加到solrconfig.xml文件中:

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

如果你对queryResultCache感兴趣,你也可以阅读这篇博客文章:https://sease.io/2022/04/queryresultcache-and-filtercache-in-apache-solr.html

相关问题