3

現在SOLRでインデックスを作成しているドキュメントは、定期的に部分的に更新する必要がある場合があるという要件があります。更新は次のいずれかになります。新しいフィールドを追加しますb。既存のフィールドの内容を更新します。スキーマの一部のフィールドは保存されますが、他のフィールドは保存されません。

SOLR 4はこれを許可しますが、すべてのフィールドを保管する必要があります。新しいフィールドを既存のドキュメントに更新するおよびhttp://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/を参照してください。

質問:1。SOLRがこれを達成できる方法はありますか。過去にSOLRJOINを試しましたが、すべてのユースケースに適しているわけではありませんでした。

  1. 一方、elastic search、LinkedInのsenseidb、または他のテキスト検索エンジンはこれを実現できますか?

今のところ、影響を受けるドキュメントのインデックスを作成する必要がある場合は、インデックスを再作成して管理します

ありがとう

4

1 に答える 1

10

Solr には保存されたフィールドの制限があります。その通りです。基礎となる lucene では、常に古いドキュメントを削除し、新しいドキュメントにインデックスを付ける必要があります。実際、lucene セグメントは一度だけ書き込み可能であり、既存のセグメントを変更するために戻ることはありません。したがって、ドキュメントを削除済みとしてマークし、マージが発生したときに実際に削除するだけです。

lucene 上の検索サーバーは、古いドキュメントを削除して新しいドキュメントを自動的に再インデックス化できる単一のエンドポイントを公開することで、この問題を回避しようとしますが、何らかの方法で古いドキュメントを取得する方法が必要です。すべてのフィールドを保存する場合にのみ、Solr はそれを実行できます。

Elasticsearch は、デフォルトでソース ドキュメントを という特別なフィールドに保存することを回避します_source。これはまさに、インデックス作成中に最初に検索エンジンに送信したドキュメントです。ちなみにこれは、elasticsearch を NoSQL データベースに似たものにする機能の 1 つです。elasticsearch Update APIを使用すると、次の 2 つの方法でドキュメントを更新できます。

  1. 既存のドキュメントとマージされる新しい部分ドキュメントを送信します (古いドキュメントは削除し、マージの結果にインデックスを付けます)
  2. 既存のドキュメントでスクリプトを実行し、古いドキュメントを削除した後に結果をインデックス化する

どちらのオプションも、フィールドの存在に依存してい_sourceます。ソースの保存は無効にすることができます。無効にすると、もちろんこの優れた機能が失われます。

于 2013-03-01T16:29:56.603 に答える