2011-01-25 6 views
1

Sphinxを検索エンジンとして使用するWordPressベースのWebサイトがあります。通常のcronジョブはサイトのMySQLデータベースにアクセスしてN時間ごとにSphinxインデックスを再構築します。これは、投稿が作成または編集された場合を除いて正常に動作します。その場合は、インデックスを再構築するまでインデックスが作成されずに残っています。文書をSphinxインデックスに追加し、完全再構築なしで属性を変更する

Sphinx PHP API documentationによれば、すでにインデックスされたドキュメントの更新のみが許可されています。新しいドキュメントをゼロから再構築したり、デルタとマージしたりすることなくインデックスに追加する方法はありません。インデックスから文書を削除する方法はありません。

さらに、UpdateAttributesのソースコードを参照すると、数値属性のみが更新可能であることがわかります(他の種類はアサーションによって除外されます)。これにより、インデックスを更新することはSphinx開発者が本当に歓迎するものではないと私は思います。

この問題を解決する方法はありますか、特定のドキュメントを必要とするだけでなく、スケジュールどおりにインデックスを変更する方法はありますか?または、スフィンクスでは悪い習慣です。頻繁に更新されるデルタインデックスをマージして使用することは、更新するドキュメントが1つだけであっても容認できる解決策ですか?

ありがとうございます。

答えて

2

Sphinxリアルタイムインデックス(http://sphinxsearch.com/docs/current.html#rt-overview)を試して、インデックス全体を再構築せずに既存のインデックスに1つのドキュメントを追加することができます。

+0

面白い、ありがとう。しかし、わかっている限り、私はRTインデックスを使って新しい文書を追加し、すでに索引付けされているものは変更しないことができます。 RTインデックス内でさえ、INSERTとDELETEだけがサポートされていますが、UPDATEはサポートされていません(ただし、古いレコードを削除して新しいレコードを変更することができます)。 私の主な関心事は、ディスクインデックスの古い文書とそれらを修正することです。それらをRTエントリで「上書き」することはできますか? RTインデックスのドキュメントが同じIDを持つ場合は、ディスクからドキュメントを置き換えるか、フィルタがマージされた後に検索結果に表示されますか? – Yuriy

+0

REPLACEまたはDELETE + INSERTを使用できます。いずれにしても、新しい文書は古い文書を上書きします。 –