0

次の状況があります: DB ~ 116G ~800 mln。次の構造を持つ行:

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `key` varchar(256) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `key` (`key`(255)) USING BTREE

2 番目の列には、ロシア語/英語の文字と単語、数字、および #、%、\ などの特殊文字を含めることができます。ロシア語/英語の文字と数字だけで検索を整理したい。

スフィンクスの構成:

source keywords
{
    sql_query_pre       = SET NAMES utf8
    sql_query       = \
        SELECT * \
        FROM keywords
    sql_query_info      = SELECT * FROM keywords WHERE id=$id
}
index keywords
{
    source          = keywords
    docinfo         = extern
    dict            = keywords
    mlock           = 0
    min_stemming_len    = 1
    min_word_len        = 1
    charset_type        = utf-8
    charset_table = U+0030..U+0039, U+0041..U+005A, U+0061..U+007A, U+0410..U+044F
    ignore_chars        = U+0021..U+0029, U+003A..U+0040, U+005B..U+0060, U+007B..U+040F, U+0450..U+2FFFF
    min_prefix_len      = 1
    enable_star = 1
    html_strip      = 0
}

indexer
{
    mem_limit       = 1024M
}

searchd
{
    client_timeout      = 300
    max_children        = 30
    max_matches     = 1000000
    max_packet_size     = 8M
    max_batch_queries   = 32
}

PHP 構成:

    $oCl->SetMatchMode(SPH_MATCH_PHRASE);

    $oCl->SetLimits(0, $iLimit);

    $sQueryForSphinx = implode('* ', explode(' ', $oCl->EscapeString($sQuery))) . '*';

    $aResult = $oCl->Query('" ' . $sQueryForSphinx . ' "');

次の検索アルゴリズムを提供したい: $Query にはユーザー データがあります。スペースで区切られたロシア語/英語の文字と数字を含む単語のみが存在する可能性があります。単語の最小長は 1 です。単語の最小数は 1、最大は 3 です。ユーザーが入力した順序と同じ順序でこれらの単語を含むデータベース内のすべてのキーを検索したいと考えています。また、すべての単語には、単語の末尾に追加の記号を含めることができます。

例: ユーザーが入力: tes test test1: 次のフレーズを含むキーを返す必要があります: "tes test test1"、"test test1 test12"、"test1 test12 test124" など。

この構成は、4 シンボルを超える長さのワードで完全に機能します。検索時間は 5 秒未満です。

私の問題は、長さが 4 記号未満の単語を 1 つ以上含むフレーズ (たとえば、「te t test」) を入力すると、sphinx の動作が非常に遅く、約 1 分以上かかることです。

この問題を解決する方法はありますか?

4

1 に答える 1

0

を試すことができdict=crcます。これらのクエリのパフォーマンスが大幅に向上するはずです。(インデックス作成が遅くなり、インデックスがはるかに大きくなります)

dict=keywordsインデックスは、短い単語の検索では非常に遅くなる可能性があります。「プレフィックスの爆発」の問題のため。

dict=keywords は最近になってデフォルト モードになったばかりなので、そのパフォーマンスはまだよくわかっていません。ここのコメントを参照してください: http://sphinxsearch.com/blog/2013/09/11/deprecations-and-changes-in-the-2-2-series/ 私が話しているインデックスは小さいです - オートコンプリート用ですが、 100倍の性能差でした

于 2013-10-29T20:24:29.290 に答える