Elasticsearch - имя поля по умолчанию

0 Robin Rieger [2016-01-15 09:30:00]

В 2.0 alpha для гнезда я изо всех сил DefaultFieldNameInferrer установить DefaultFieldNameInferrer в camelCase.

После выяснения того, как просмотреть "тело запроса" (по настройке DisableDirectStreaming на true, несмотря на то, что значение по умолчанию истинно...), я вижу, что для запроса типа:

...fil.Bool(b2 => b2.Must(m => m.Term(t => t.DomainName, host))))...

он отправляет DomainName с надписью D:

...{"term":{"DomainName":{"value":"example.com"}}}]}...

Версия 1.7 всегда отправила camelCase, и, следовательно, мои сопоставления - все camelCase.

Как я могу изменить это обратно на camelCase?

редактировать

Подключение:

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"}}}]}}]}}}

elasticsearch nest


1 ответ


1 Решение Robin Rieger [2016-01-28 00:43:00]

Просто добавьте это как ссылку, если кто-нибудь споткнется по этому вопросу позже.

Здесь сообщается о проблеме Github.

См. Комментарий "Mpdreamz".

Я вижу два варианта:

  1. реализовать подкласс нашего JsonNetSerailizer, который возвращает то, что вам нужно для CreatePropertyName

  2. Добавьте крючок в начале каскадного потока разрешения. например, еще одна функция для соединений.