web-dev-qa-db-ja.com

Search APIインデックスをcronタスクとして設定するにはどうすればよいですか?

私がSearch APIの設定で読んだことから、cronが実行されたときにページがインデックスに登録されているように思えます。これはそうではないようですが、おそらく私のロジックに欠陥があります。

ブログ/ニュースサイトの管理を手伝います。すべてのコンテンツは検索APIを介してインデックスが付けられ、ビューを使用してそのインデックス付けされたコンテンツのリストをレンダリングしています。 One Viewディスプレイは、サイトの最も人気のあるコンテンツのリストを表示します。これは、統計モジュールを使用して計算されます。 Number of viewsフィールドを使用してこのビューをソートしていることがわかります: enter image description here

最初は、ソート基準がまったく機能していないと思いました。テスト用にレンダリングされた出力にNumber of viewsを追加しましたが、ページビューが変更されたときにページが並べ替えられていませんでした。

enter image description here

しかし、検索APIが手動で再インデックスされた後にのみ、ノードが並べ替えられることが最終的にわかりました。現在、検索APIはパブリッシュ直後にノードにインデックスを付けるように設定されていますが、これが発生すると、完全な再インデックスは行われないと想定しています。新しいノードを作成してこれをテストしたところ、ノードの順序が更新されないことがわかりました。また、Cronを手動で実行したところ、これも機能しないことがわかりました。

さて、Cronを実行しているときにSearch APIがインデックスを再作成していないようですが、これが有効な仮定であるかどうかはわかりません。そうでない場合は、毎晩再インデックスを設定します。このcronタスクを作成するにはどうすればよいですか?

3
Kellen

ノードが更新されたときにのみインデックスが再作成される限り、あなたは正しいです。ノードを表示しているユーザーは更新として認識されないため、ビューの数を増やしてもノードのインデックスは再作成されません。

スケジュールに従ってインデックス全体を再構築することは正常ではありません。 Cronは、インデックス付けが必要であるとマークされているノードのみを再インデックス付けします。

インデックスを毎晩再構築するようにスケジュールする方法は2つあります。

  1. コマンドラインレベルでサーバーにアクセスできる場合は、カスタムcronジョブを介してdrushコマンド「search-api-reindex」を実行できます。 Webサーバーと同じユーザー(Apacheやwww-userなど)として実行し、-lオプションを使用してURLを指定し、cron行が次のようになるようにします:_0 23 * * * cd /var/www/home && drush sapi-r default_
  2. それ以外の場合は、カスタムモジュールに独自のcronフックを記述して、同じことを行うことができます。モジュールelysia_cronは、適切な時間にそれをスケジュールするのに役立ちます。ポイント1のcronジョブと同じ効果を得るには、search_api_index_reindex('default');を呼び出す必要があります。
2