新しいフィールドを既存のドキュメントに更新する可能性はありますか?例:いくつかのフィールドを持つドキュメントがあります。
ID=99999
Field1:text
Field2:text
このドキュメントはすでにインデックスに含まれているので、古いデータなしでこのドキュメントに新しいフィールドを挿入します。
ID=99999
Field3:text
今のところ、古いドキュメントは削除され、IDを持つ新しいドキュメントが作成されます。したがって、ID 99999を検索すると、結果は次のようになります。
ID=99999
Field3:text
SolrWikiでこれを読みました
既存のドキュメントの特定のフィールドを更新するにはどうすればよいですか?
ドキュメントの特定のフィールドを更新したいのですが、それは可能ですか? >特定のドキュメントの1つのフィールドにインデックスを付けるだけで済みます。このためにすべてのドキュメントにインデックスを付ける必要がありますか?
いいえ、1つのドキュメントだけです。 CMSがあり、1つのドキュメントを編集するとします。このドキュメントのインデックスを再作成する必要があるのは、ドキュメント全体に対してadd solrステートメントを使用する場合のみです(1つのフィールドのみではありません)。
Luceneでは、ドキュメントを更新するための操作は、実際には削除とそれに続く追加です。 Luceneにはそのような「フィールドのみを更新する」セマンティクスがないため、>完全なドキュメントを追加する必要があります。
それで、これに対する解決策はありますか?この機能は今後のバージョンで実装されますか(私は現在3.6.0を使用しています)。回避策として、既存のフィールドを収集し、新しいフィールドを追加して、ドキュメント全体を更新するスクリプトまたはアプリケーションを作成することを考えました。しかし、これはパフォーマンスを低下させると思います。他に何かアイデアはありますか?
宜しくお願いします
私はあなたに2つの答えがあります(多かれ少なかれ悪い):
これがあなたの問題に役立つことを願っています。他にご不明な点がございましたら、お問い合わせください
Solr4でこれを行うことができます。次のドキュメントを検討してください
{
"id": "book123",
"name" : "Solr Rocks"
}
ドキュメントに作成者フィールドを追加するためのフィールド値は、「set」属性とフィールド値を持つjsonオブジェクトになります。
$ curl http://localhost:8983/solr/update -H 'Content-type:application/json' -d '
[
{"id" : "book123",
"author" : {"set":"The Community"}
}
]'
あなたの新しい文書
$ curl http://localhost:8983/solr/get?id=book123
になります
{
"doc" : {
"id" : "book123",
"name" : "Solr Rocks"
"author": "The Community"
}
}
セットは、作成者フィールドを追加または置換します。セットに加えて、increment(inc)およびadding(add)するオプションもあります。
Solr 4以降では、solrのフィールドを更新できます....インデックス全体のインデックスを再作成する必要はありません....さまざまな修飾子がサポートされています...
set –特定の値を設定または置換するか、新しい値としてnullが指定されている場合は値を削除しますadd –リストに値を追加しますremove –リストから値(または値のリスト)を削除しますremoveregex –から削除します指定されたJava正規表現incに一致するリスト–数値を特定の量だけインクリメントします(負の値を使用してデクリメントします)
例:
資料
{
"id": "1",
"name" : "Solr"
"views" : "2"
}
今すぐ更新
$ curl http://localhost:8983/solr/demo/update -d '
[
{"id" : "1",
"author" : {"set":"Neal Stephenson"},
"views" : {"inc":3},
}
]'
結果として
{
"id": "1",
"name" : "Solr"
"views" : "5"
"author" : "Neal Stephenson"
}