私は現在、2,000万以上のレコードを持つMySQLクエリのインデックス作成にSphinxを使用しています。
デルタインデックスを使用してメインインデックスを更新し、すべての新しいレコードを追加しています。
残念ながら、テーブルへの変更の割り当ては削除されます。
sql_query_killlistを使用して、削除または更新する必要のあるすべてのドキュメントIDを取得できることを理解しています。残念ながら、これが実際にどのように機能するかを理解しておらず、Sphinxのドキュメントには私が理解するのに十分な例がありません。
次の例を使用する場合、どのようにキルリストを実装できますか?
MySQLで
CREATE TABLE sph_counter
(
counter_id INTEGER PRIMARY KEY NOT NULL,
max_doc_id INTEGER NOT NULL
);
sphinx.confで
source main
{
# ...
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
sql_query = SELECT id, title, body FROM documents \
WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}
source delta : main
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, body FROM documents \
WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}
インデックスメイン
{
source = main
path = /path/to/main
# ... all the other settings
}
他のすべての設定がメインからどのようにコピーされるかに注意してください。ただし、ソースとパスはオーバーライドされます(必ずオーバーライドされます)。indexdelta:main
{
source = delta
path = /path/to/delta
}