Я хочу добавить документ в эластичный поиск, используя ElasticSearch.NET
nuget.
Работает нормально, но только если я создаю объект PostData
, используя PostData.MultiJson
.
Если я попробую то же самое, используя PostData.String
, документ будет добавлен, но при создании индекса (первое сообщение) поля даты создаются как строки, в отличие от первого метода, где поля даты создаются как * 1007. *.
Следующий пример иллюстрирует:
public void AddJsonWithDate()
{
var connectionSettings = new ConnectionConfiguration(new Uri(_elasticSearchHost));
var esClient = new ElasticLowLevelClient(connectionSettings);
var obj = new Demo { N1 = 21312, S1 = "test", Date = DateTime.Now };
/*
indexName, PostData.String(postDataJson)
indexName, PostData.MultiJson(new object[] { postDataJson })
*/
var jsonStr = WriteFromObject<Demo>(obj);
var postDataStr = PostData.String(jsonStr);
//var postDataObj = PostData.MultiJson(new object[] { obj });
//var response = esClient.Index<StringResponse>("myindex1", "_doc", postDataObj); /* Date field is created as DATE in the document type */
var response = esClient.Index<StringResponse>("myindex2", "_doc", postDataStr); /* Date field is created as STRING in the document type */
}
public string WriteFromObject<T>(T obj) where T : class, new()
{
//Create a stream to serialize the object to.
MemoryStream ms = new MemoryStream();
// Serializer the User object to the stream.
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
ser.WriteObject(ms, obj);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, 0, json.Length);
}
public class Demo
{
public int N1 { get; set; }
public string S1 { get; set; }
public DateTime Date { get; set; }
}
В настоящее время мое приложение отправляет jsons в виде строк. Как мне решить эту проблему?