我有一個索引文檔的服務。 該服務收到兩個以下請求 - 第一個是插入文檔,第二個是刪除它。 當它們之間存在一段時間時,它可以正常工作,但是當它們一個接一個地發送時,文檔不會被刪除。 我從Nest獲得的迴應看起來很成功。如果在插入請求後立即發送刪除請求,則文檔不會被刪除
我的功能很長,所以我只會寫入插入和刪除裏面。如果需要更多信息,我將添加它(例如,如果插入也會將其從所有其他可用索引中刪除,並在需要時插入一些映射)。
插入代碼:
IBulkResponse res = await _client.IndexManyAsync(entities, index, type);
刪除代碼:
var termFilter = new List<Func<QueryContainerDescriptor<JObject>, QueryContainer>>
{
c => c.Terms(t => t.Field(ID_FIELD).Terms(ids))
};
await _client.DeleteByQueryAsync<JObject>(indices, types, d => d.Query(q => q.Bool(b => b.Must(termFilter))));
例如,這種集成測試不起作用:
var indices = new { "some_index_1", "some_index_2" };
var entity = new Entity { Action = ReplicationAction.INSERT, ... };
await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);
entity.Action = ReplicationAction.DELETE;
await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);
版本:2.3.5 ElasticSearch,。 Net 4.6,Nest 2.4.6
的刪除是在這種情況下,相當頻繁的畫面背後。還有其他一些情況,我需要一次刪除多個文檔。我還應該使用刷新api嗎?如果沒有,我還能做什麼? – Mei
我剛剛嘗試使用刷新api(等待_client.RefreshAsync(新RefreshRequest(indices))),但它幫助 – Mei
ES每秒刷新一次。因此,如果你說兩秒鐘就可以睡一覺,如果你的頻率小於每秒一個文件,你可以刷新。 但我的建議是睡一秒鐘。 –