コンテンツのインポート/移行との統合方法
SearchWPはWordPress内で発生する特定の操作に反応します。コンテンツが編集されると、WordPressはSearchWPに編集内容を通知し、SearchWPはその編集されたコンテンツを再インデックスします。これにより、何も管理する必要がなく、インデックスは時間とともに自動的に最新の状態に保たれます。
本質的に、コンテンツインポートルーチン(例:WP All Importを使用した場合)は、非常に短い時間枠で多数(場合によっては同時)の編集を行います。これは、WordPressが多数の編集が行われていることを示す信号を送信する際に、SearchWPが反応する際に悪影響を及ぼす可能性があります。
インポートが十分に大きく、十分に速く実行される場合、SearchWPのインデクサーは編集通知で溢れかえり、最終的にインデックスが同期しなくなります。これは望ましくありません。なぜなら、SearchWPは独自のインデックスを繰り返し循環させ始めたり、さらに悪いことに不正確な検索結果を返したりする可能性があるからです。
コンテンツインポートを適切に処理する
注意: SearchWPバージョン4.1.16以降、WP All Importの処理は自動的に処理されます!
SearchWPの自動統合について続きを読むか、または独自のインポートを実装するために読み進めてください。
インポートスクリプトを実行する際には、少なくともSearchWPインデクサーを無効にすることをお勧めします。これは、独自のインポートスクリプトを変更するか、選択したプラグインで利用可能なフックを利用することで実行できます。これから行うことの擬似コードは次のとおりです。
Pause SearchWP indexer
Tell SearchWP to mark each edited entry for re-indexing
Run import in full
Enable SearchWP indexer
Trigger build of SearchWP index
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Disable SearchWP's automatic integration with WP All Import. | |
| add_filter( 'searchwp\integration\wp-all-import', '__return_false' ); | |
| add_action( 'pmxi_before_xml_import', function( $import_id ) { | |
| \SearchWP::$indexer->pause(); | |
| }, 10 ); | |
| add_action( 'pmxi_saved_post', function( $post_id ) { | |
| $source_name = \SearchWP\Utils::get_post_type_source_name( get_post_type( $post_id ) ); | |
| $source = \SearchWP::$index->get_source_by_name( $source_name ); | |
| // Mark this to be dropped after the import has finished. | |
| \SearchWP::$index->drop( $source, $post_id ); | |
| }, 10 ); | |
| add_action( 'pmxi_after_xml_import', function( $import_id ) { | |
| \SearchWP::$indexer->unpause(); | |
| // Process all entries marked to be dropped. | |
| \SearchWP::$index->unpause(); | |
| \SearchWP::$index->trigger(); | |
| }, 10 ); |
このスニペットを配置することで、SearchWPはコンテンツインポートにより適切に反応し、インポートスクリプトが完了した後、正確なインデックスが構築されます。また、インポート処理中にSearchWPがリソースを競合しないため、インポートが少し速く実行されるようになります。

