1

我正在从传统的主从模型过渡到 SolrCloud。我正在使用 Solr 4.4 并设置了 2 个分片,每个分片有 1 个副本。我有 3 个动物园管理员合奏。所有节点都在 AWS EC2 实例上运行。分片位于 m1.xlarge 上并共享一个 zookeeper 实例(安装在单独的卷上)。为每个 solr 实例分配 6 GB 内存。

我在索引中有大约 1000 万个文档。使用之前的独立模型,查询平均约为 100 毫秒。到目前为止,SolrCloud 的查询响应非常糟糕。查询响应时间超过1000ms,经常达到2000ms。由于额外的服务器、网络延迟等,我预计会出现一些激增,但这种差异确实令人困惑。两种情况下的硬件都是相似的,除了几个 SolrCloud 节点也共享 zookeeper。m1x.large I/O 很高,因此也不应该成为瓶颈。

与旧设置的另一个区别是我正在使用新的 CloudSolrServer 类,该类具有 3 个 zookeeper 参考用于负载平衡。但我不认为它有任何重大影响,因为从 Solr 管理查询面板执行的查询证实了缓慢。

以下是我的一些配置设置:

提交频率


<autoCommit> 
        <maxTime>30000</maxTime> 
        <openSearcher>false</openSearcher> 
</autoCommit> 

<autoSoftCommit> 
        <maxTime>1000</maxTime> 
</autoSoftCommit>

布尔子句:

<maxBooleanClauses>1024</maxBooleanClauses> 
缓存设置:


<filterCache class="solr.FastLRUCache" size="16384" initialSize="4096" 
autowarmCount="4096"/> 

<queryResultCache class="solr.LRUCache" size="16384" initialSize="8192" 
autowarmCount="4096"/> 

<documentCache class="solr.LRUCache" size="32768" initialSize="16384" 
autowarmCount="0"/> 

<fieldValueCache class="solr.FastLRUCache" size="16384" 
autowarmCount="8192" showItems="4096" /> 

<enableLazyFieldLoading>true</enableLazyFieldLoading> 

<queryResultWindowSize>200</queryResultWindowSize> 

<queryResultMaxDocsCached>400</queryResultMaxDocsCached> 

查询监听器:


<listener event="newSearcher" class="solr.QuerySenderListener"> 
        <arr name="queries"> 
                <lst><str name="q">line</str></lst> 
                <lst><str name="q">xref</str></lst> 
                <lst><str name="q">draw</str></lst> 
        </arr> 
        </listener> 
                <listener event="firstSearcher" 
class="solr.QuerySenderListener"> 
                        <arr name="queries"> 
                                <lst><str name="q">line</str></lst> 
                                <lst><str name="q">draw</str></lst> 
                                <lst><str name="q">line</str><str 
name="fq">language:english</str></lst> 
                                <lst><str name="q">line</str><str 
name="fq">Source2:documentation</str></lst> 
                                <lst><str name="q">line</str><str 
name="fq">Source2:CloudHelp</str></lst> 
                                <lst><str name="q">draw</str><str 
name="fq">language:english</str></lst> 
                                <lst><str name="q">draw</str><str 
name="fq">Source2:documentation</str></lst> 
                                <lst><str name="q">draw</str><str 
name="fq">Source2:CloudHelp</str></lst> 
                        </arr> 
</listener> 

<maxWarmingSearchers>2</maxWarmingSearchers>

请求处理程序:

代码>
<requestHandler name="/cloudhelp" class="solr.SearchHandler">
                <lst name="默认值">
                        <str name="echoParams">显式</str>
                        <float name="tie">0.01</float>
                        <str name="wt">速度</str>
                        <str name="v.template">浏览</str>
                        <str
name="v.contentType">text/html;charset=UTF-8</str>
                        <str name="v.layout">布局</str>
                        <str name="v.channel">云帮助</str>

                        <str name="defType">edismax</str>
                        <str name="q.alt">*:*</str>
                        <str name="rows">15</str>
                        <str
name="fl">id,url,Description,Source2,文本,文件类型,标题,LastUpdateDate,PublishDate,ViewCount,TotalMessageCount,Solution,LastPostAuthor,Author,Duration,AuthorUrl,ThumbnailUrl,TopicId,score</str>
                        <str name="qf">文本^1.5 标题^2 索引词^.9
关键字^1.2 ADSKCommandSrch^2 ADSKContextId^1</str>
                        <str name="bq">来源2:CloudHelp^3
来源2:youtube^0.85</str>
                        <str
name="bf">recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0</str>
                        <str name="df">文本</str>


                        <str name="facet">开启</str>
                        <str name="facet.mincount">1</str>
                        <str name="facet.limit">100</str>
                        <str name="facet.field">语言</str>
                        <str name="facet.field">Source2</str>
                        <str name="facet.field">文档手册</str>
                        <str name="facet.field">ADSKProductDisplay</str>
                        <str name="facet.field">观众</str>


                        <str name="hl">真</str>
                        <str name="hl.fl">文本标题</str>
                        <str name="f.text.hl.fragsize">250</str>
                        <str name="f.text.hl.alternateField">ShortDesc</str>


                        <str name="spellcheck">真</str>
                        <str name="spellcheck.dictionary">默认</str>
                        <str name="spellcheck.collat​​e">真</str>
                        <str name="spellcheck.onlyMorePopular">假</str>
                        <str name="spellcheck.extendedResults">假</str>
                        <str name="spellcheck.count">1</str>
                </lst>
                <arr name="last-components">
                        <str>拼写检查</str>
                </arr>
        </requestHandler>

我注意到的一件事是 queryresultcache 命中率非常低,不确定我们的查询是否总是那么独特。我正在使用 edismax 并且有一个 recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0 ,这可以贡献吗?

很抱歉这篇长文,但我正在努力解决这个问题,特别是当查询在具有类似硬件和网络的主从环境中运行良好时。

任何指针将不胜感激。

  • 谢谢
4

1 回答 1

1

感谢您的注意:

唯一的区别是 Solrcloud 有 4 台服务器,而之前只有 1 台从服务器。

默认情况下,SolrCloud 在活动节点之间分发请求并整理结果。我的建议是利用分片之间的文档和查询路由,这将提供最佳性能。

于 2013-10-20T10:25:14.263 回答