2017-01-26 2 views
0

NEST 1.x에서 작성된 코드를 2.x로 변경하는 방법에 대한 설명서가 있습니까?변경 사항 b/w ElasticSearch 1.x 및 2.x

나는이 사이트에서 봤는데 그들이 불완전한 위치 : 내가 원하는 예를 들어
https://github.com/elastic/elasticsearch-net/blob/master/docs/2.0-breaking-changes/nest-breaking-changes.md

https://github.com/elastic/elasticsearch-net

https://www.elastic.co/blog/ga-release-of-nest-2-0-our-dot-net-client-for-elasticsearch

다음을 교체하는 방법을 알고 :

1)

given ISearchResponse<T> searchResults = ... 

가 할 방법 :

searchResults.ConnectionStatus 
searchResults.RequestInformation.Request 

2)

client.Get<T>(s => s.Id(id)); 

3)
가 MatchQuery 두 번 입력 매개 변수로 fuziness를 허용하지 않습니다

new SearchDescriptor<T>() 
      .From(from)  
      .Size(pageSize) 
      .Query(query); //this dosen't work anymore 

4 QueryContainer query)을 감안할 때 사용 된 문자열로

5) QueryDescriptor는 말하다

6) client.Update가

를 체포되어 간 것 같다
var result = client.Update<CustomerProfile>(request => request 
       .Id(customer.CustomerId) 
       .Doc(customer) 
       .Refresh() 
       ); 
7) client.Get이

8 client.Update과 유사한 방식으로 체포되어

) 매핑에서 다음 설정이 더 이상 작동하지 않습니다.

CreateIndexDescriptor cid = ... 
cid.NumberOfReplicas(numReplicas) 
    .NumberOfShards(numShards) 
    .Settings(s => s 
     .Add("merge.policy.merge_factor", "10") 
     .Add("search.slowlog.threshold.fetch.warn", "1s") 
    ) 
    .Analysis(a => a.TokenFilters etc etc 

012 3,516,

편집

9) 날짜 범위 :
의 startDate와 endDate가이 날짜 시간 유형에게 있습니다

var qd = new QueryContainerDescriptor<EsActivity>(); 
     QueryContainer qc = qd.Range(r => 
        r.Field("esactivity.timestamp") 
        .GreaterThanOrEquals(DateMath.Anchored(startDate)) 
        .LessThanOrEquals(DateMath.Anchored(endDate)) 
       ); 

.GreaterThanOrEqualsdouble 매개 변수를 기대하지만, 문서 페이지에이 DateMath.Anchored(startDate)

10) 강조한다 :

highlightFields: List<string> 
Action<HighlightFieldDescriptor<T>> [] tmp = highlightFields.Select(field => 
          new Action<HighlightFieldDescriptor<T>>(
           highlighter => highlighter.Field(field) 
         ) 
        ).ToArray(); 

sd:SearchDescriptor<..>.. 
sd.Highlight(h => h 
         .PreTags(preTag) 
         .PostTags(postTag) 
         .OnFields(tmp) 
        ); 

OnFields(tmp).Fields(f=>f.OnAll())으로 바꿀 수 있지만 여전히 필드를 직접 지정하고 싶습니다.

우리가 이미 쿼리 개체에 강조 표시를 적용 했으므로 HighlightQuery 옵션을 사용할 수 있습니다. 이제 쿼리 호출이 2 개 있습니다.

나는 searchResults.ApiCallsearchResults .ConnectionStatus을 대체

  var tmp = highlightFields.Select(field => 
          Tuple.Create<Field, IHighlightField>(
           Field.Create(field), 
           new HighlightField() 
         ) 
         ).ToDictionary(x => x.Item1, x => x.Item2); 

      sd.Highlight(h => new Highlight 
       { 
        PreTags = new[] { preTag }, 
        PostTags = new[] { postTag }, 
        Fields = tmp 
       } 
      ); 

답변

1

1) 위의 강조 변환했습니다.

당신은 요청을 얻을 수는 searchResults.ApiCall.RequestBodyInBytes와 바이트 당신은 또한 요청이 기본적으로 직접 요청 스트림에 기록 된대로 바이트를 캡처하기 위해 ConnectionSettings.DisableDirectStreaming()을 설정해야합니다.

2) 사용 client.Get<T>(id) - 첫 번째 매개 변수는 DocumentPath<T> type입니다.

3)이 Elasticsearch 2.x를 제거 하였다 때문에 단지 doublemapped to a formula to calculate edit distance in Elasticsearch 1.x.Func<QueryContainerDescriptor<T>, QueryContainer>

new SearchDescriptor<T>() 
    .From(from)  
    .Size(pageSize) 
    .Query(_ => query); 

4) match 쿼리 번짐에서 반환 유창 API 설명에 QueryContainer를 전달하기 위해, 인 또한 NEST에서 사라졌습니다. 당신은

client.Search<Document>(s => s 
    .Query(q => q 
     .Match(m => m 
      .Query("this is my query") 
      .Fuzziness(Fuzziness.EditDistance(3)) 
     ) 
    ) 
); 

회원님이 type와 참조하는지 확인과 흐릿한 편집 거리를 설정할 수 있습니다,하지만 난 당신이 문서 유형을 참조 것 같아? 그런 경우에는 문서 유형은 더 나은이 QueryContainer

6) 업데이트를 구축하기위한 기술자가 있다는 사실을 반영하는 암시 적

client.Search<Document>(s => s 
    .Type("other-type") 
    .MatchAll() 
); 

5) QueryDescriptor<T>QueryContainerDescriptor<T>로 이름이 바뀌 었로 변환 stringTypes 형식을 취 API는 (당신이있는 경우) PAS 될 수있는 첫 번째 매개 변수는 DocumentPath<T>, 문서 인스턴스이기 때문에

// specifying id 
client.Update<Document>("document-id", u => u 
    .Doc(document) 
    .Refresh() 
); 

작동 첫 번째 매개 변수로 나오지 인덱스 유형과 ID가 문서 인스턴스

7)로부터 추정됩니다

client.Update<Document>(document, u => u 
    .Doc(document) 
    .Refresh() 
); 

는 레벨을 반영하기 위해 개정 된 인덱스 설정을 만들기

8) 위 참조 유창 API는을 보장하지만 설정은, 당신이 원하는 경우는 설정에 문자열을 사용할 수 있습니다

client.CreateIndex("index-name", c => c 
    .Settings(s => s 
     .NumberOfShards(2) 
     .NumberOfReplicas(2) 
     .SlowLog(sl => sl 
      .Search(sls => sls 
       .Fetch(slsf => slsf 
        .ThresholdWarn("1s") 
       ) 
      ) 
     ) 
     .Analysis(a => a) // etc... 
    ) 
); 

나머지 API를 JSON 호출에 표시되는 올바른 설정 값은 예를 들어, "search.slowlog.threshold.fetch.warn" 지금 "index.search.slowlog.threshold.fetch.warn"

client.CreateIndex("index-name", c => c 
    .Settings(s => s 
     .NumberOfShards(2) 
     .NumberOfReplicas(2) 
     .Setting("index.search.slowlog.threshold.fetch.warn", "1s") 
     .Analysis(a => a) // etc... 
    ) 
); 

merge.policy.merge_factor is removed in Elasticsearch 2.0

+1

덕분에이 대답 시간을내어 많은입니다; DataRange 쿼리 및 하이라이팅과 유사한 문제가 있습니다 - 해당 질문을 – Adrian

+0

으로 업데이트하는 중 하나의 질문이 10 개입니다. 다른 질문을 열어 볼 가치가 있습니다. 비슷한 질문을 가진 다른 사람들이 쉽게 답을 찾을 수 있기 때문입니다. –

관련 문제