更改黑白ElasticSearch 1.x和2.x

阿德里安

是否存在有关如何将用NEST 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)
给定QueryContainer query

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

4)MatchQuery不像以前那样接受fuziness作为double类型和类型参数作为字符串

5)QueryDescriptor似乎喘不过气来

6)client.Update被破坏

 var result = client.Update<CustomerProfile>(request => request
                .Id(customer.CustomerId)
                .Doc(customer)
                .Refresh()
                );

7)client.Get的删除方式与client.Update类似

8)在“映射”中,以下设置不再起作用

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

编辑

9)日期范围:
startDate和endDate是DateTime类型

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

.GreaterThanOrEquals需要一个double参数,但是在文档页面上需要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个查询调用。

我已经将上面的突出显示转换为

            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
                }
            );
拉斯·卡姆(Russ Cam)

1)searchResults.ApiCall替换searchResults .ConnectionStatus

您可以使用来获取请求字节,searchResults.ApiCall.RequestBodyInBytes并且默认情况下直接将其写入请求流时,还需要设置.DisableDirectStreaming()onConnectionSettings来捕获字节。

2)使用client.Get<T>(id)-第一个参数是DocumentPath<T>type

3)要将a传递QueryContainer给Fluent API描述符,只需将其从Func<QueryContainerDescriptor<T>, QueryContainer>

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

4)将match查询模糊性double 映射为公式,以计算Elasticsearch 1.x中的编辑距离。由于在Elasticsearch 2.x中已将其删除,因此它也从NEST中消失了。您可以使用以下方式设置模糊性编辑距离

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

不知道您指的是什么type,但我认为您指的是文档类型?在这种情况下,文档类型采用的Types类型会string隐式转换为

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

5)QueryDescriptor<T>重命名为QueryContainerDescriptor<T>更好地反映以下事实:它是用于构建QueryContainer

6)更新API的工作原理

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

由于第一个参数是a DocumentPath<T>,因此可以将文档实例(如果有)作为第一个参数传递

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

其中将从文档实例中推断出索引,类型和ID

7)见上文

8)创建索引设置已经过修改,以反映设置在REST API json调用中出现的级别

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将确保发送正确的设置值,例如"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 在Elasticsearch 2.0中被删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章