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".
Я вижу два варианта:
реализовать подкласс нашего JsonNetSerailizer, который возвращает то, что вам нужно для CreatePropertyName
Добавьте крючок в начале каскадного потока разрешения. например, еще одна функция для соединений.