简介
我将弹性版本升级到6.3(以前我们使用的是5.4。 我们的应用程序是用C#编写的,因此我们使用NEST.NET dll与Elastic服务器通信,因此我们还将其更新到版本6.0.0.0。
用例-之前
直到第5版,我才可以执行以下查询:
jsonStr ="
{
"from": 16224,
"size": 12,
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"terms": {
"COMPANY": [
"AMP Services Ltd"
]
}
}
]
}
}
]
}
}
}
}"
使用此NEST / C#代码:
Func<SearchRequestParameters, SearchRequestParameters> requestParameters = null;
requestParameters = a => a.Scroll(new TimeSpan(0, 1, 0));
response = Connection.Client.GetInstance().LowLevel.Search<dynamic>("myindex", new PostData<dynamic>(jsonStr), requestParameters);
这样,我就可以毫无问题地获取数据
用例-现在
现在,在版本6中,我正在尝试执行以下相同的查询:
jsonStr ="
{
"from": 16224,
"size": 12,
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"terms": {
"COMPANY": [
"AMP Services Ltd"
]
}
}
]
}
}
]
}
}
}"
使用此NEST / C#代码(因为以前的方法签名不再可用):
SearchRequestParameters searchRequest = new SearchRequestParameters();
searchRequest.Scroll = new TimeSpan(0, 1, 0);
response = Connection.Client.GetInstance().LowLevel.Search<StringResponse>("myindex", PostData.String(jsonStr), searchRequest);
我收到此错误: “验证失败:1:在滚动上下文中不允许使用[from];”
文档
我在此处(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html)和此处(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/sliced-scroll-search-usage.html)找不到任何内容来帮助我替换此逻辑。论坛也没有。
你们对此有什么见识吗?
谢谢
答案 0 :(得分:2)
它似乎与validation change in Elasticsearch in 6.0.0有关;在5.x中,为滚动请求允许使用from
参数,但无提示地忽略了该参数。现在,在6.0.0中,Elasticsearch更加严格,它会验证是否存在用于滚动请求的from
,如果存在,则返回错误响应,并带有适当的验证错误。
由于from
参数对于滚动请求没有意义,因此解决方案是执行这两个操作之一
from
参数from
参数,但不要使用Scroll API。顺便说一句,如果您需要滚动许多文档,则可能需要使用ScrollAll()
observable helper进行滚动。