2016-06-27 2 views
2

私はElasticSearch 2.3とASP.NET Webアプリケーションを使用しています。 C#HttpClientを使用してREST APIを通じてElasticSearchを呼び出しています。ElasticSearchクエリの結果はキャッシュされますか?

新しい値を配列に追加しようとすると問題が発生します。

ステップ1:ここでは

は、基本的に私が行っていたクエリだ

POST /notes/note/_search 
{ 
    "query" : { 
    "term" : { "_id" : 1 } 
    } 
} 

のみ1ノートあります注意して取得し、その結果、ノートが添付ファイルの空の配列を含んでいることを示して

ステップ2:メモの添付ファイルの配列を更新する

POST: /notes/note/1/_update 
{ 
    "doc" : { 
     "Attachments" : [ "Test" ] 
    } 
} 

ステップ3:Get結果はノートはまだ空の添付ファイルの配列が含まれていることを示して再び

POST: /notes/note/_search 
{ 
    "query" : { 
    "term" : { "_id" : 1 } 
    } 
} 

に注意してください。

しかし、私がKibanaのSearch/MatchAllを実行すると、Attachments配列が新しい項目で更新されていることがわかります。しかし、ASP.NETからこれらのステップをすべて実行すると、アップデート直後に直ちにそれを検索するときに、更新されたドキュメントが取得されません。

これは何らかのキャッシュによって引き起こされますか?

更新が実行された後に文書の一貫性のある状態を取得するにはどうすればよいですか?

ありがとう

答えて

0

何が起こっているかは、リフレッシュがまだ行われていないことです。 get by idを実行するよりも、まだ更新が利用可能ではありません。したがって、検索を実行する前に強制的にリフレッシュしてください。多くの文書を挿入すると、パフォーマンスに影響があります。しかし、あなたはうまくいくはずです。

+0

つまり、ElasticSearchを使用する最良の方法は、挿入または更新クエリの直後にドキュメントのインデックスを作成したり、インデックスを再作成することを期待しないようにアプリケーションを設計することです。あれは正しいですか ? – TchiYuan

+0

正しいTchi元 –

関連する問題