Elasticsearch按查询脚本更新参数最大大小

时间:2017-12-26 17:14:05

标签: c# elasticsearch nest

我在C#上使用带有Nest 5的Elasticsearch 5.

我有一个看起来像这样的实体:

public class ESMessageRecipients
{
    public int MessageId { get; set; }
    public int CustomerSiteId { get; set; }
    public DateTime CreationDate { get; set; }

    public List<string> ContactGuids { get; set; } ....

这样的映射:

client.CreateIndex(indexName, c => c
            .Index(indexName)
            .Settings(s => s
               // Custom analizers
                .Analysis(a => a
                    .Analyzers(an => an
                        .Custom("default", cas => cas.Tokenizer("keyword").Filters(new string[] { "lowercase", "trim" }))
                    )
                )
            )
            .Mappings(m => m
                .Map<ESMessageRecipients>(map => map.AutoMap())
            )
        );

我需要更新&#39; ContactGuids&#39;当时收集了成千上万的指南。我试图通过查询语句更新这样做:

...
.Script(s => s
                .Inline(@"                    
                    if (ctx._source.contactGuids == null) { 
                        ctx._source.contactGuids = new ArrayList(); 
                    }

                    for (int i=0; i < params.guids.length; i++) {
                        if (!ctx._source.contactGuids.contains(params.guids[i])) {
                            ctx._source.contactGuids.add(params.guids[i]);
                        }
                    }                                    
                ")
                .Lang("painless")
                .Params(p => p
                    .Add("guids", newGuids.ToArray())
                )
            )
...

但我遇到的问题是,如果我发送一个大的guid列表(比如5k guids),Elastic会抛出异常。我还尝试发送较小的列表(如1k guids),并且它适用于该案例。

以下是5k guid的例外情况:

Content: {"error":{"root_cause":[{"type":"script_exception","reason":"runtime error","script_stack":["for (int ","^---- HERE"],"script":" 

脚本是否超出了大小限制? 如果是这种情况,有没有办法增加我可以发送给ES的脚本参数的大小?

这个列表可以有数百万个guid,所以我需要一种方法来使所有这些表现得非常好。

0 个答案:

没有答案