我在C#上使用带有Nest 5的Elasticsearch 5.
我有一个这样的实体:
public class Visitor {
...
public List<ESRecipient> RecipientOf { get; set; }
...
像这样的映射
.Index(ESIndexName)
.Settings(s => s
...
.RefreshInterval("10s")
...
)
.Mappings(m => m
.Map<Visitor>(map => map
// Routing required
.AutoMap().RoutingField(r => r.Required(true))
// Custom Properties
...
.Properties(p => p.Nested<ESRecipient>(n => n.Name(name => name.RecipientOf).AutoMap()))
...
我正在通过这样的查询进行更新:
client.UpdateByQuery<Visitor>(u => u
.Script(script => script
.Inline(@"
...
")
)
.ScrollSize(10000)
.RequestsPerSecond(-1)
.Refresh(false)
我遇到的问题是,当我按查询运行更新时,大约需要8秒来更新30000个访问者,但如果我将索引RefreshInterval更改为30秒,则更新需要100毫秒才能运行。所以我的猜测是Elasticsearch在这种情况下只是忽略了refresh = false查询字符串,它只是在更新后刷新索引。
当我设置&#34; .Refresh(false)&#34时,我期望在100毫秒内运行此更新。在update语句事件中,如果我只是将索引刷新间隔保留为默认值1秒。