ElasticSearch를 사용 중이고 동적 유형 속성이있는 클래스로 색인을 만들려고합니다. 이 속성에는 문자열이나 날짜가있을 수 있습니다. 인덱싱 할 때 아래 코드를 사용했습니다.ElasticSearch에서 날짜를 색인으로 매핑하려고 시도했습니다.
dynamic instance = MyObject.GetDynamicJson();
var indexResponse = client.Index((object) instance, i=>i
.Index("myIndex")
.Type("MyObject")
);
다음은 GetDynamicJson() 코드입니다. MyObject는 속성으로 이름과 값만 있습니다. (사과, 나는 탄성 내가 \ 문자로 이스케이프 한 모든 따옴표없이 JSON에 질식과 과거에 문제를 했어) : 어떤 이유
String json = "{ \"Name\":\" + Name + "\",\"DateValue\":\"";
try {
var date = DateTime.parse(Value);
json += DateTime.ToString("yyyy/MM/dd HH:mm:ss Z") + "\", \"Value\":\"\"}";
} catch { //If the DateTime parse fails, DateValue is empty and I'll have text in Value
json += "\",\"Value\":\"" + Value + "\"}";
}
return json;
는 문자열을 좋아하지 않는 것 DateValue에서 나는 완전히 그 속성을 오류로 빠뜨리는 이유를 확실히 알지 못합니다 :
어떤 이유로 든 ElasticSearch는 DateValue 속성을 완전히 덤프하고 있으며, DateValue 속성을 전혀 보이지 않습니다.
{ "이름": "CreatedDate", "값": "2017-11-07T13 : 37 : 11.4340238-06 : 00"}
나는 오류를 받고 있어요 [지수 : 데이터/쓰기/"type": "class_cast_exception", "reason": "org.elasticsearch.index.mapper.TextFieldMapper는 org.elasticsearch.index.mapper.DateFieldMapper로 형변환 될 수 없습니다"}, "상태": 500
이상 주 : 이름, 값, DATEVALUE :. 나는 특성을 가지고 그래서 지금, 내가 개체에 세 번째 필드를 추가 매핑을 업데이트 할 수있는 인덱스 작성자 방법을 변경 한
public static void CreateRecordsIndex(ElasticClient client)
{
client.CreateIndex("myIndex", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
)
.Mappings(x => x
.Map<MyObject>(m => m.AutoMap())));
}
이제는 매번 성공적으로 매핑하고 속성을 만들지 만 여전히 json에서 보내는 속성을 삭제하는 것으로 보입니다. 모든 날짜를 기본 datetime : "dateValue": "0001-01-01T00 : 00 : 00"으로 설정하면됩니다. 이것은 이상한 일입니다. 왜냐하면 동적 인스턴스를 만들어 Elastic에 전송할 때 MyObject.GetDynamicJson() 메서드 만 사용하기 때문입니다. 더 이상 매핑 오류가 발생하지 않지만 탄성은 여전히 "dateValue"를 모르는 것처럼 보입니다.