2015-01-13 3 views
1

У меня есть следующий C# модель:Проблемы с форматом Дата в elasticsearch.net и гнездо (C#)

[ElasticType(Name = "myType")] 
public class MyType 
{ 
    ... 
    [ElasticProperty(Name = "ElasticId")] 
    [DataMember(Name = "ElasticId")] 
    public string ElasticId { get; set; } 
    ... 
    [ElasticProperty(Name = "DateToBeUsed", Type = FieldType.Date, DateFormat = "date_hour_minute_second_millis")] 
    public string DateToBeUsed { get; set; } 
    ... 
} 

The "date_hour_minute_second_millis" соответствуют в следующем формате: YYYY-MM-dd'T'HH: мм : СС.ссс (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-date-format.html)

отображение ES осуществляется с использованием гнездо «карты» Способ и соответствуют тому, что:

"mappings": { 
    "myType": { 
     "properties": { 
      ..., 
      "ElasticId": { 
       "type": "string" 
      }, 
      ..., 
      "DateToBeUsed": { 
       "type": "date", 
       "format": "date_hour_minute_second_millis" 
      }, 
      ... 
     } 
    } 
} 

вставить документ внутри этой Ind ex:

"_source": { 
     ..., 
     "ElasticId": "2", 
     ..., 
     "DateToBeUsed": "2012-05-21T09:51:34.073", 
     ... 
     } 

Моя проблема в том, когда я хочу получить этот объект через гнездо.

Значение DateToBeUsed всегда отформатирован в следующем формате: ММ/дд/гггг HH: MM: SS (например: 05/21/2012 9:51:34)

(Использование смысле, значение хорошо отформатировано.)

1 °) Это нормально?

Мне нужно получить тот же формат даты, что и тот, который я дал ES. (И я думаю, что должно быть нормально иметь тот же формат, что и в картине)

2 °) Есть ли «чистые» решения для решения этой проблемы? (Повторное форматирование даты после получения документа не является «чистым» решением ...)

Спасибо за ответы! До свидания.

ответ

1

Я пытался воспроизвести то, что вы видите, используя следующий код, но значение даты возвращается в Get вызова, как и ожидалось:

string indexName = "so-27927069"; 

// --- create index --- 
client.CreateIndex(cid => cid.Index(indexName)); 
Console.WriteLine("created index"); 

// --- define map --- 
client.Map<MyType>(m => m 
    .Index(indexName) 
    .Type("myType") 
    .MapFromAttributes()); 
Console.WriteLine("set mapping"); 

// ---- index ----- 
client.Index<MyType>(
    new MyType 
    { 
     DateToBeUsed = new DateTime(2012, 5, 21, 9, 51, 34, 73) 
      .ToString("yyyy-MM-ddThh:mm:ss.fff"), 
     ElasticId = "2" 
    }, 
    i => i 
     .Index(indexName) 
     .Type("myType") 
     .Id(2) 
); 
Console.WriteLine("doc indexed"); 

// ---- get ----- 
var doc = client.Get<MyType>(i => i 
     .Index(indexName) 
     .Type("myType") 
     .Id(2) 
    ); 

Console.WriteLine(); 
Console.WriteLine("doc.Source.DateToBeUsed: "); 
Console.WriteLine(doc.Source.DateToBeUsed); 
Console.WriteLine(); 
Console.WriteLine("doc.RequestInformation.ResponseRaw: "); 
Console.WriteLine(Encoding.UTF8.GetString(doc.RequestInformation.ResponseRaw)); 

Я вижу следующий результат, выход:

created index 
set mapping 
doc indexed 

doc.Source.DateToBeUsed: 
2012-05-21T09:51:34.073 

doc.RequestInformation.ResponseRaw: 
{"_index":"so-27927069","_type":"myType","_id":"2","_version":1,"found":true,"_source":{ 
    "ElasticId": "2", 
    "DateToBeUsed": "2012-05-21T09:51:34.073" 
}} 

(Наблюдение за трафик через Fiddler, я вижу точное соответствие между значением ResponseRaw и полезной нагрузкой ответа на Get запрос.)

Я нахожусь в версии 1.5.2 и версии NEST 1.6.0. (Возможно, проблема, которую вы видели, была исправлена ​​когда-то в промежуточный период ....)

+0

Спасибо за ответ :) Я был на NEST 1.4.1 и ES 1.4.x .. Может быть, проблема решена или, может быть, я что-то не так .. В любом случае, спасибо :) –