従来のマスター/スレーブ モデルから 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 があります。これは貢献できますか?
長い投稿で申し訳ありませんが、ここで問題を特定するのに苦労しています。特に、同様のハードウェアとネットワークを備えたマスター/スレーブ環境でクエリが正常に実行されている場合はなおさらです。
どんな指針も高く評価されます。
- ありがとう