メモリの量とメモリ内のトークン インデックスの量によって異なります。
合計 360MB のインデックスは、古いコンピューターですばやく検索できます。360GB のインデックスはもう少し時間がかかります... ;)
例として、古い 2GB のインデックスを起動し、「*e」を検索しました。
8GB のボックスでは、5 秒以内に 500K のヒットが返されました。メモリが 1GB しかないボックスで同じインデックスを試してみたところ、約 20 秒かかりました。
さらに詳しく説明するために、基本的に 1000 万個のランダムな 3 単語フレーズの "** E*" タイプの検索を行う一般的な C# コードを次に示します。
static string substring = "E";
private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
private static string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
static void FindSubStringInPhrases()
{
List<string> index = new List<string>();
for (int i = 0; i < 10000000; i++)
{
index.Add(RandomString(5) + " " + RandomString(5) + " " + RandomString(5));
}
var matches = index.FindAll(SubstringPredicate);
}
static bool SubstringPredicate(string item)
{
if (item.Contains(substring))
return true;
else
return false;
}
1,000 万のフェーズがすべてリストに読み込まれた後でも、「var matches = index.FindAll(SubstringPredicate);」に約 1 秒しかかかりません。400 万件以上のヒットを返します。
ポイントは、メモリが高速であるということです。物事がメモリに収まらなくなり、ディスクへのスワップを開始する必要がある場合、パフォーマンスの低下が見られます。