従来のマスター/スレーブ モデルから SolrCloud に移行中です。私は Solr 4.4 を使用しており、それぞれ 1 つのレプリカを持つ 2 つのシャードをセットアップしています。私は 3 飼育係のアンサンブルを持っています。すべてのノードは AWS EC2 インスタンスで実行されています。シャードは m1.xlarge 上にあり、zookeeper インスタンスを共有しています (別のボリュームにマウントされています)。各 solr インスタンスには 6 GB のメモリが割り当てられます。
インデックスには約 1,000 万のドキュメントがあります。以前のスタンドアロン モデルでは、クエリの平均は約 100 ミリ秒でした。これまでのところ、SolrCloud クエリの応答はひどいものでした。クエリの応答時間は 1000 ミリ秒を超え、2000 ミリ秒に達することもよくあります。サーバーの追加やネットワークの遅延などによる急増を予想していましたが、この違いには本当に困惑しています。ハードウェアはどちらの場合も似ていますが、SolrCloud ノードのカップルが Zookeeper も共有しているという事実を除きます。m1x.large I/O は高いため、ボトルネックにもなりません。
古いセットアップとのもう 1 つの違いは、負荷分散のために 3 つの Zookeeper 参照を持つ新しい CloudSolrServer クラスを使用していることです。しかし、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> <文字列 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> <文字列 name="fl">id,url,Description,Source2,text,filetype,title,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> <文字列 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">ソース2</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.collate">真</str> <str name="spellcheck.onlyMorePopular">false</str> <str name="spellcheck.extendedResults">false</str> <str name="spellcheck.count">1</str> </lst> <arr name="last-components"> <str>スペルチェック</str> </arr> </requestHandler>
私が気づいたことの 1 つは、queryresultcache のヒット率が非常に低く、クエリが常に一意であるかどうかわからないことです。私は edismax を使用していますが、 recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0 があります。これは貢献できますか?
長い投稿で申し訳ありませんが、ここで問題を特定するのに苦労しています。特に、同様のハードウェアとネットワークを備えたマスター/スレーブ環境でクエリが正常に実行されている場合はなおさらです。
どんな指針も高く評価されます。
- ありがとう