【发布时间】:2016-04-20 17:11:35
【问题描述】:
在 Nest 的 2.0 alpha 版本中,我正在努力将 DefaultFieldNameInferrer 设置为 camelCase。
在弄清楚如何查看“请求正文”之后(通过明确将 DisableDirectStreaming 设置为 true,尽管默认值为 true...),我可以看到类似以下的请求:
...fil.Bool(b2 => b2.Must(m => m.Term(t => t.DomainName, host))))...
它正在发送DomainName,并带有大写D:
...{"term":{"DomainName":{"value":"example.com"}}}]}...
1.7 版总是发送驼峰式,因此我的映射都是驼峰式。
我怎样才能把它改回驼峰式?
编辑
连接:
ElasticClient = new ElasticClient
(new ConnectionSettings(new Uri(WebConfigMethods.GetElasticSearchUri())).MapDefaultTypeIndices
(new ElasticsearchMethods().ElasticSearchDefaultTypeIndices)
.DisableDirectStreaming(true)
.DefaultFieldNameInferrer
(s =>
{
if (string.IsNullOrEmpty(s))
return s;
if (!char.IsUpper(s[0]))
return s;
string camelCase = char.ToLower(s[0], CultureInfo.InvariantCulture)
.ToString(CultureInfo.InvariantCulture);
if (s.Length > 1)
camelCase += s.Substring(1);
return camelCase;
}));
请求:
var result = elasticClient.Search<ADocType>
(s => s.Take(1)
.Query
(qu =>
qu.Bool
(b => b.Filter(fil => fil.Bool(b2 => b2.Must(m => m.Term(t => t.DomainName, host)))))));
巢实际发送的是什么:
{"size":1,"query":{"bool":{"filter":[{"bool":{"must":[{"term":{"DomainName":{"value":"example.com"}}}]}}]}}}
【问题讨论】:
-
@Val 我试图覆盖它,如编辑中所见......没有运气......:S
-
[JsonProperty("DomainName")] public string DomainName{ get; set; }-- 一直如此......即在嵌套 1.7 上,我的连接字符串只上升到不包括DisableDirectStreaming并且它适用于驼峰式案例...... .DefaultFieldNameInferrer甚至说默认是camelCase,但我无法让它工作。 Json 是 7.01 -
@Val 将
JsonProperty更改为domainName实际上会更改请求。鉴于我有数千个这样的设置并且它们都是大写字母,是否有一个设置我可以在嵌套中传递以强制骆驼大小写并忽略嵌套 1.7 中的JsonProperty?
标签: elasticsearch nest