问题描述
当我运行此代码时:
var result = _client.Index<EntityType>(item,i => i.Index(n));
我收到此错误:
发生异常:CLR/System.StackOverflowException 未处理 “System.StackOverflowException”类型的异常发生在 Elasticsearch.Net.dll
完整方法:
public bool Index<EntityType>(EntityType item,int attempt = 0) where EntityType : class,IDomainEntity<int>
{
const int maxRetries = 5;
if (item == null)
{
return false;
}
var type = item.GetType();
var attributes = type.CustomAttributes;
string n = "";
foreach (var attribute in attributes)
{
foreach (var arg in attribute.NamedArguments)
{
if (arg.MemberName == "RelationName")
{
n = arg.TypedValue.Value.ToString().ToLower();
}
}
}
var result = _client.Index<EntityType>(item,i => i.Index(n));
if (!CheckResponse(result) && attempt < maxRetries)
{
RefreshClient<EntityType>();
attempt++;
return Index(item,attempt);
}
RefreshClient<EntityType>();
return result.IsValid;
}
解决方法
我将 [PropertyName("propertyToIgnoreInElasticsearch",Ignore = true)]
从 NEST 添加到我的 POCO 字段,这在索引时导致无限循环。它会忽略 Elasticsearch 索引中的一个字段,因此不会对其进行索引。
例如:
[Serializable]
public abstract class VeganItem<VeganItemEstablishmentType>
{
[Required]
public string Name { get; set; }
[PropertyName("veganItemEstablishments",Ignore = true)]
public virtual ICollection<VeganItemEstablishmentType> VeganItemEstablishments { get; set; }
}