【发布时间】:2015-03-12 02:29:41
【问题描述】:
我有一个 qtime 为 2-3(毫秒)的 solr 查询。但是,响应时间约为 5 秒。
- 响应格式为 CSV,因此响应尽可能少
- 仅返回 2 个“列”
- Solr 版本为 4.10.3
- 内置码头下的 Solr
- 响应大小 ~500kb
显然,问题似乎在于将数据从 solr 发送到我的应用程序,但如果查询时间为 2 毫秒且响应仅为 ~500kb,则不应花费 5 秒。
是否有可能增加缓冲量的码头设置?还是某个地方的 solr 设置?
编辑(solrconfig.xml):
<config>
<luceneMatchVersion>4.7</luceneMatchVersion>
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
<dataDir>/etc/solr/default/solr/${solr.core.name}/data</dataDir>
<schemaFactory class="ClassicIndexSchemaFactory"/>
<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">/etc/solr/default/solr/${solr.core.name}/data</str>
</updateLog>
</updateHandler>
<requestHandler name="/get" class="solr.RealTimeGetHandler">
<lst name="defaults">
<str name="omitHeader">true</str>
</lst>
</requestHandler>
<requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
<requestDispatcher handleSelect="true" >
<requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
</requestDispatcher>
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
<requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
<requestHandler name="/update" class="solr.UpdateRequestHandler" />
<requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
<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>
<!-- term vector -->
<searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
<requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str> <!-- config for the admin interface -->
<bool name="tv">true</bool>
</lst>
<arr name="last-components">
<str>tvComponent</str>
</arr>
</requestHandler>
<!-- more like this -->
<searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler" />
<!-- config for the admin interface -->
<admin>
<defaultQuery>solr</defaultQuery>
</admin>
<!-- caches -->
<query>
<filterCache class="solr.FastLRUCache"
size="512"
initialSize="512"
autowarmCount="0"/>
<!-- Query Result Cache -->
<queryResultCache class="solr.LRUCache"
size="512"
initialSize="512"
autowarmCount="0"/>
<!-- Document Cache -->
<documentCache class="solr.LRUCache"
size="512"
initialSize="512"
autowarmCount="0"/>
</query>
</config>
干杯
【问题讨论】:
-
为什么传输 500 kb 不需要 5 秒?可能是你的连接很慢?你在用 SolrCloud 吗?
-
网络比这快很多。其他大小的传输要快得多。同样,增加数据量(至 ~1MB)会使要在网络上发送的数据量翻倍,但响应时间相似。
-
你能显示你的 solrconfig.xml 吗?
-
完成!我确实设法通过更高的文档缓存使这个速度提高了大约 5 倍,但如果有任何其他想法,编写响应似乎仍然很慢?