デルタインデックスのアップデートに問題があります。
文書IDがmax_doc_id
より小さい場合は、デルタ索引には含まれていないため、メイン索引が更新されない限り、このデータは適用されません。
1000個のデータがあるとします。
50番目のドキュメントが変更されても、デルタインデックスは変更されません。
delta-indexには、文書の変更IDがmax_doc_id
未満のものはどのように含まれますか?
デルタインデックスには、メインインデックスの実行を待つ必要がなくなるようにデータが更新されるという方法がありますか?sphinxsearchデルタインデックスのアップデート
0
A
答えて
0
文書の更新と挿入を追跡する場合は、文書の改訂用に別の列が必要です。リビジョン値はドキュメントテーブル全体で一意である必要があります。グローバルシーケンスを使用してリビジョン値を生成することをお勧めします。
既存のドキュメントを更新するか、新しいドキュメントを挿入する場合は、リビジョンシーケンスから次の値を取得して、ドキュメントリビジョンの列に保存する必要があります。自動リビジョンの更新にDBトリガーを使用することをお勧めします。
sql_query_pre
セクションでは、最小リビジョン値と最大リビジョン値をsph_counter
テーブルに保存し、それらを使用して適切なデルタインデックスを作成することができます。
1
本当に私が好きなのは、タイムスタンプの列をに自動的に追加することです。トラックが変更されました。
列を追加...
ALTER TABLE documents
ADD updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX(updated);
デフォルトも重要であり、それは、新しくドキュメントを作成したもが含まれています。
次に、キルリストを使用してクエリで使用できます。主なものには、索引作成時のすべての文書が含まれます。しかし、デルタには新しい文書や変更された文書が含まれます。キルリストは、古いバージョンのを意味し、無視されます。
CREATE TABLE sph_counter
(
counter_id INTEGER PRIMARY KEY NOT NULL,
max_doc_id INTEGER NOT NULL,
indexing_time DATETIME NOT NULL
);
source main
{
# ...
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id), NOW() FROM documents
sql_query = SELECT id, title, body FROM documents
}
source delta : main
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, body FROM documents \
WHERE updated > (SELECT indexing_time FROM sph_counter WHERE counter_id=1)
sql_query_killlist = SELECT id FROM documents \
WHERE updated > (SELECT indexing_time FROM sph_counter WHERE counter_id=1)
}
(キルリストを持っているように、メインをフィルタリングない点は、重複が文句を言わない事もネーヴ必要がmax_doc_idいけない - 。。そうsph_counterはsql_query_preと一緒に簡単にすることができ、多くの方法でその恥はあなたが繰り返す必要がありキルリストのクエリ。インデックス内のすべてのドキュメントをキルリストとして使用するようにスフィンクスに指示することはできません)
関連する問題
- 1. デルタインデックス - ジョブが
- 2. Sphinxsearchインデックスmin_stemming_len
- 3. sphinxsearchインデクサーの警告とエラー
- 4. Sphinxsearchはアラビアの言葉
- 5. デルタインデックスを持つリモートデータベースサーバー上のThnkingSphinx(sphinxd)?
- 6. デルタインデックスのみコンソールで作業する
- 7. Sphinxのデルタインデックスはコンソールでのみ更新されます
- 8. Sunspot:デルタインデックスはどのように機能しますか?
- 9. 検索のためのsphinxsearchウェブフロントエンドはありますか?
- 10. sphinxsearchが私のコンテンツとタイトルフィールドを返さない
- 11. アップデート時のMySQLアップデート
- 12. Group ByとGroup_ConcatでSphinxsearchを実行する方法
- 13. sphinxsearch pidファイルが空でnetstatが何も報告しない
- 14. アプリのアップデート時にiOSアップデートのコアデータ
- 15. ノードとNPMのアップデートVS Cordovaのアップデート5
- 16. SphinxSearchインデックスにいくつの属性を追加できますか?
- 17. sphinxsearchが属性が欠落しているとエラーを返します
- 18. ノードのアップデート
- 19. C#のWSUSアップデート
- 20. アップルストアのアップデート?
- 21. アップデートのVSTOデプロイメント
- 22. Androidアプリケーションのアップデート
- 23. コンポーネントのアップデート2011
- 24. アップデートの手順
- 25. IPv6アップルのアップデート
- 26. JavaEEアプリケーションのアップデート
- 27. affectivaライセンスのアップデート
- 28. アップデートJavaScriptのオブジェクト
- 29. デフォルトアプリのアップデート
- 30. AIRアプリケーションのアップデート
私はあなたを理解できませんでしたか? とにかく、ありがとうございます – navid
タイムスタンプの使用とよく似ていますが、明示的にインクリメントするシーケンスを維持するだけです。文書を更新するたびに明示的にリビジョンを更新します。同じ結果 - どの文書が変更されたかを知る方法があります。どちらもうまくいく – barryhunter