答えはノーであり、dbのインデックスを再作成するようにsphinxに指示する必要があります。
知っておく必要のあるいくつかの手順と要件があります:
- メインとデルタは必須です
- 最初の実行では、メインインデックスにインデックスを付ける必要があります。
- 最初の実行後、デルタをローテーションしてインデックスを作成できます(サービスが実行されており、その時点でWeb上のデータを使用できることを確認するため)
- 次の手順に進む前に、「最後にインデックス付けされた行」をマークするテーブルを作成する必要があります。最後にインデックス付けされた行IDは、次のインデックス付けデルタおよびメインへのデルタのマージに使用できます。
- デルタインデックスをメインインデックスにマージする必要があります。スフィンクスドキュメント内のように
http://sphinxsearch.com/docs/current.html#index-merging -
sphinxサービスを再起動します。
ヒント:C#または他の言語を使用してインデックスを実行できる独自のプログラムを作成します。 Windowsのタスクスケジュールも試すことができます。
これが私のconfです:
source Main
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = table1
sql_port = 3306 # optional, default is 3306
sql_query_pre = REPLACE INTO table1.sph_counter SELECT 1, MAX(PageID) FROM table1.pages;
sql_query = \
SELECT pd.`PageID`, pd.Status from table1.pages pd
WHERE pd.PageID>=$start AND pd.PageID<=$end \
GROUP BY pd.`PageID`
sql_attr_uint = Status
sql_query_info = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
sql_query_range = SELECT MIN(PageID),MAX(PageID)\
FROM tabl1.`pages`
sql_range_step = 1000000
}
source Delta : Main
{
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT PageID, Status from pages \
WHERE PageID>=$start AND PageID<=$end
sql_attr_uint = Status
sql_query_info = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
sql_query_range = SELECT (SELECT MaxDoc FROM table1.sph_counter WHERE ID = 1) MinDoc,MAX(PageID) FROM table1.`pages`;
sql_range_step = 1000000
}
index Main
{
source = Main
path = C:/sphinx/data/Main
docinfo = extern
charset_type = utf-8
}
index Delta : Main
{
source = Delta
path = C:/sphinx/data/Delta
charset_type = utf-8
}