나는 사용자가 원하는대로 구조화되어 Elasticsearch에 저장 될 문서를 작성할 수있는 API 응용 프로그램을 구축하고 있습니다. 기본적으로 사용자가 Elasticsearch 인스턴스에 액세스 할 수있는 간단한 인터페이스를 제공하고 있습니다. 구현을 가능한 한 간단하게 유지하려고합니다. 지금까지 제가 다루고있는 것이 있습니다. 예상 몸에 NEST를 사용하여 동적 객체를 색인하기
목적 :
public class DocumentModel
{
public string Index { get; set; }
public string Type { get; set; }
public string Id { get; set; }
[ElasticProperty(Type = FieldType.Nested)]
public dynamic Document { get; set; }
}
간단한 구현 :
[HttpPost]
[Route("")]
public IHttpActionResult Post(DocumentModel document)
{
Uri nodeLocation = new Uri("http://localhost:9200");
IConnectionPool connectionPool = new SniffingConnectionPool(new List<Uri> { nodeLocation });
ConnectionSettings settings = new ConnectionSettings(connectionPool);
ElasticClient esClient = new ElasticClient(settings);
IIndexResponse result = esClient.Index(document, i => i
.Index(document.Index)
.Type(document.Type)
.Id(document.Id));
return Ok(result.IsValid);
}
소스에이 잘 작동하지만,이 색인 유형을 포함하고 ID입니다. 내가 정말로하고 싶은 것은 인덱싱 할 때 세 가지 정보를 제공하는 것뿐입니다. 실제로는 동적 인 유형의 document.Document를 인덱스로 만듭니다. 그러나 그는 IDE 및 컴파일시 에러가 발생합니다 같은 둥지에 동의하는 것 같다
"익명 함수 또는 메소드 그룹은 동적 바인딩 작업의 구성 값으로 사용할 수 없습니다"
"먼저 대리자 또는 식 트리 형식으로 캐스팅하지 않으면 람다 식을 동적으로 디스패치 된 연산의 인수로 사용할 수 없습니다."
어떻게 document.Document
에 색인을 생성 할 수 있습니까? 동적 유형을 사용하는 것보다 알 수없는 구조의 들어오는 JSON 문서를 처리하는 더 좋은 방법이 있습니까?
새 색인 – Adrian
의 이전 색인과의 부모 - 자식 관계를 유지하고 싶습니다. '동적 사전'대신 '사전 <문자열, 객체>'를 사용했거나 클래스를 상속 받았습니다. 경고 :'Dictionary'에서 상속받은 경우 NEST는 문서의 다른 속성을 자동 매핑하지 않습니다 (대신 사전에 넣음). 이는 또한 가변 속성에 대해 잘 작동했습니다 : 공통 속성은 POCO 등록 정보에 들어가고 변수 속성은'Dictionary 유형의 'Data' 등록 정보로 들어갑니다. 이 벌크 방법은 사용하기 쉽습니다. '.Errors' 등을 확인하기 위해'Bulk' 호출 결과를 얻는 것을 잊지 마십시오! –
nothingisnecessary