3

Sitecore.NET 6.6.0 (リビジョン 130404)

私たちの運用 Web サイトは非常に検索が多く、Lucene インデックスは 1 日を通して頻繁にクエリされます。これは、Lucene クエリの処理にかなりの量の CPU パワーが費やされていることになります。Lucene インデックスとクエリを別のマシンにオフロードする業界慣行はありますか? または、Lucene クエリのパフォーマンスを向上させるために使用できるハードウェア メカニズムはありますか?

(最も使用されている Lucene インデックスには 10,000 未満のエントリが含まれています)

更新 (詳細):

私たちのインデックスには 10,000 未満しか含まれていませんが、CPU 使用率は、並行して実行される Lucene クエリの数が多いために発生する可能性がありますか? 非常に複雑なファセット検索があります。最初に、ユーザーがさまざまな検索条件を試すと、すべての検索オプションとともに結果カウントの内訳が表示されました (各検索要求で 50 ~ 60 カウントのクエリが発生しました)。これにより、トラフィックが多いときに CPU 使用率が 90 ~ 95% に達しました。カウントを削除すると、CPU は約 20 ~ 30% で安定しました。

クエリに使用する 2 つの方法を次に示します。

    public static Document[] GetLuceneDocuments(ACIndex acIndex, Query query, Sort sort = null, int maxResults = 999, bool trackScores = false, bool fillFields = true)
    {
    Index index = SearchManager.GetIndex(GetIndexName(acIndex));

    if (sort == null)
    {
        sort = new Sort(new SortField(null, SortField.SCORE));
    }

    using (IndexSearchContext searchContext = index.CreateSearchContext())
    {
        Lucene.Net.Search.IndexSearcher searcher = searchContext.Searcher;

        TopFieldCollector collector = TopFieldCollector.create(sort, maxResults, fillFields, trackScores, false, false);
        searcher.Search(query, collector);
        TopDocs topdocs = collector.TopDocs();

        Document[] documents = new Document[topdocs.ScoreDocs.Length];
        for (int i = 0; i < topdocs.ScoreDocs.Length; i++)
        {
            documents[i] = searcher.Doc(topdocs.ScoreDocs[i].doc);
        }

        return documents;
    }
    }

    public static int GetSearchResultCount(ACIndex acIndex, Query query)
    {
        Index index = SearchManager.GetIndex(GetIndexName(acIndex));

        using (IndexSearchContext searchContext = index.CreateSearchContext())
        {
            Lucene.Net.Search.IndexSearcher searcher = searchContext.Searcher;

            TopScoreDocCollector collector = TopScoreDocCollector.create(1, false);
            searcher.Search(query, collector);
            return collector.GetTotalHits();
        }
    }
4

5 に答える 5

2

検索用に Solr を実装することを検討する必要があります。このテーマの専門家ではありませんが、Solr は Lucene ベース (移行を容易にする) であり、中央サーバーまたは複数のサーバーから実行され、すべての検索要件を処理します。

Solr は、Sitecore 7 より前のバージョンではネイティブに公式にサポートされていませんが、Solr を使用する多くの Sitecore 6 ソリューションに取り組んできました。

次の記事を参考にしてください: Solr を Sitecore に実装する方法

業界のプロセスに関する限り、Sitecore では、Solr がこの特定の問題に対するソリューションです。ただし、ソリューションの実装によっては、立ち上がるまでに多少の作業が必要になる場合があります。

于 2013-10-03T11:48:10.717 に答える