2014-04-16 2 views
0

많은 다른 문서가 있으므로 매핑 필드에 POCO를 사용하지 않고 문서 색인을 생성해야하는 Elasticsearch.Net & NEST 클라이언트 라이브러리를 사용하여 일부 코드를 작성했습니다.문서를 색인 할 수 없습니다.

질문 1) 올바른 방법으로 색인을 만들 수 있습니까? .AddMapping<string>(mapping => mapping.Dynamic(true))은 전달 된 문서를 기반으로 매핑을 만드나요?

var newIndex = client.CreateIndex(indexName, index => index 
    .NumberOfReplicas(replicas) 
    .NumberOfShards(shards) 
    .Settings(settings => settings 
    .Add("merge.policy.merge_factor", "10") 
    .Add("search.slowlog.threshold.fetch.warn", "1s") 
    ) 
    .AddMapping<string>(mapping => mapping.Dynamic(true)) 
); 

질문 2) 가능합니까? 나는 "질문 2"에서 코드를 실행하면

string document = "{\"name\": \"Mike\"}"; 
var newIndex = client.Index(document, indexSelector => indexSelector 
     .Index(indexName) 
); 

그것은 반환 {"Unable to perform request: 'POST ' on any of the nodes after retrying 0 times."}

답변

2

NEST는 /{indexName}/string/{id}에 문서 색인에 원인이됩니다 문자열을 전달하는이 경우 입력 된 개체를 다루고있다.

문자열에서 id를 추론 할 수 없으므로이를 전달하지 않거나 문자열을 직렬화 할 수 없다는 사실에 실패합니다. 이 경우 더 나은 예외를 throw하도록 클라이언트를 업데이트 할 것입니다.

인덱스 할 경우 문자열로 문서과 같이 노출 된 Elasticsearch.NET 클라이언트를 사용 :

client.Raw.Index(indexName, typeName, id, stringJson); 

를 원하는 경우 ID가 올 elasticsearch 당신이

client.Raw.Index(indexName, type, stringJson); 

client가 사용할 수 있습니다 NEST 클라이언트와 Raw 속성은 동일한 연결 설정을 사용하는 Elasticsearch.Net 클라이언트입니다.

다음 베타 업데이트에서 Raw의 이름을 LowLevel으로 변경하고 계속 토론 할 수 있습니다.

+0

typeName을 자세히 설명해 주시겠습니까? –

+1

elasticsearch 문서는 색인과 typename의 두 부분으로 규정됩니다. 색인 이름은. 서가있는 위치를 지정하고 typename은. 서 유형이 무엇인지와 어떤 맵핑이 적용되어야하는지 지정합니다. –

+0

감사합니다. 인덱스를 만들 때 매핑을 지정하지 않고'stringJson'을 인덱싱 할 때 typeName을 포함하면 어떻게 될까요? –

관련 문제