【问题标题】:Elasticsearch - Default Field Name InferrerElasticsearch - 默认字段名称推断器
【发布时间】: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"}}}]}}]}}}

【问题讨论】:

  • 这应该会有所帮助:stackoverflow.com/questions/27282865/…
  • @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


【解决方案1】:

只需将其添加为参考,以防以后有人偶然发现此问题。

Github issue reported here.

参见“Mpdreamz”评论。

我看到两个选项:

  1. 实现我们的 JsonNetSerailizer 的子类,它返回 CreatePropertyName 所需的内容

  2. 在解析级联流程的开头添加一个挂钩。例如关于连接设置的另一个函数。

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多