2017-11-12 15 views
1
curl 'http://localhost/solr/collection/update?commit=true' 
-H 'Content-type:application/json' 
-d 
'[ 
    { 
    "id":"11111", 
    "price":{"set":1000} 
    } 
]' 

id:11111が存在する場合、価格の値が更新されます。 これは問題ありません。solrが更新中に新しい文書を追加するのはなぜですか?

id:11111が存在しない場合、新しい文書がsolrインデックスに作成されます。この動作は望ましくありません。私は、次のようなテキストでエラーが発生すると予想しています。更新しようとした文書が存在しません。 何が間違っているのか分かりません。

ソルバージョン:4.8.0。 schema.xmlの

パート:

<field name="id" type="string" indexed="true" stored="true" required="true"/> 
<uniqueKey>id</uniqueKey> 
+0

フィードバックがありますか?なぜあなたは予想された動作をしないのか理解していますか?また、solrはなぜ新しいドキュメントを '更新中'追加しますか? – EricLavault

+0

あなたの答えに私がアドバイスしたときに私のワークフローを変更することに決めました。 私はこの動作がなぜデフォルトであるのか不思議です。なぜそれは安らかではないのですか? – Dimitry

+0

これは/ updateハンドラ関数がインデックス全体を更新することであり、APIはadd/replace、delete、commit、optimizeなどの操作を提供するという点で安心しています。いくつかの操作を実行する可能性があると思いますadd、delete&commitWithinなど)を1回のバッチで実行できます。 – EricLavault

答えて

0

/updateリクエストハンドラは、新規および既存のドキュメントのインデックスを実際に更新し、削除も処理します。物価スライドの間に

:そのidは索引付けされたドキュメントのいずれとも一致しない場合、それは何の識別子を持っていない場合、または

  • 文書が新しいと考えられています。インデックス作成中にidが生成されず、uniqueKeyフィールドが必要な場合、ドキュメントは拒否されます。
  • インデックス付きドキュメントに一致する識別子を持つドキュメントは、格納されているバージョンとマージされます。すべての格納されたフィールドはインデックスからロードされ、要求パラメータのフィールド値によって上書きされ、結果のドキュメントは前の最後は同じ操作です)。他のワード更新要求に

- そうでない場合はを削除 - 常に操作を追加し、同じで終わります。ところで、solr.UpdateRequestHandlerで認識されるXMLスキーマには、操作(追加または置換)に関係なく、要素<add>,<doc>および<field>が含まれています。

最近のバージョンのSolrでは、ドキュメントの一部を更新するオプションが増えています。 (atomic updatesin-place updatesを参照してください。あなたが予想される動作で説明

何。idフィールドが必要とされているので、Solrには、文書は、このフィールドを行方不明のエラーがスローされます。あなたの状況では、文書はIDため、両方のケースでインデックス化され

idフィールドは、更新用プロセッサを使用して要求またはサーバー側を準備するときにクライアントサイドまたは要求を更新することで、新しいドキュメントとみなすフィールドが空であることを確認する必要があります新しいドキュメントのインデックス作成を妨げることがさらに簡単になるでしょうか?

0

アトミック更新の現在の実装では、動作しているようです方法です。私はエラーが出るのが望ましいかもしれないと同意します。あなたはユーザーのメーリングリストで問題を提起し、コミッターが何を考えているかを見てください。エラーが発生するはずです。ジラ。

ああ、ちょうど4.8バージョンに気づいた、それはかなり古いですが、万が一、現在のバージョンで動作をテストできますか?

+0

いいえ、それはまだ同じapiです、それはちょうど不運です、このハンドラはupdateハンドラと呼ばれますが、それはもっとcreateORupdateANDdeleteハンドラを意味します – Mysterion

関連する問題