弹性NEST返回不一致的结果



我正在尽最大努力理解NEST是如何工作的,但我认为我有一些工作。。部分。我已将10000个文档导入本地Elastic。所有的时间戳都是3天以前的。当我使用Kibana获取结果时,我有一个简单的查询:hostname:www.website.com,并且我已经将日期设置为1个月,所以我得到了所有的结果。这个特定的查询得到了44个结果,我也在CSV文件中验证了这些结果是正确的。

现在,当我尝试为NEST库编写相同的代码时,我会得到不同的结果。我得到了33、34、43和44个结果。可能还有其他数额。它大多发生在我启动应用程序之后,通常不会在我多次调用代码时发生。

public async Task Test()
{
var model = new Model() 
{
Domain = "www.website.com"
};
var timestamp = DateTimeOffset.UtcNow.AddMonths(-1).ToUnixTimeSeconds();
var nodes = new[]
{
new Uri("http://localhost:9200"),
};
var pool = new StaticConnectionPool(nodes);
var settings = new ConnectionSettings(pool);
settings = settings.BasicAuthentication("username", "password");
var client = new ElasticClient(settings);
var documents = new List<IReadOnlyCollection<ApacheRequest>>();
Time processTimePerScroll = "2s";
var numberOfSlices = Environment.ProcessorCount;
if (numberOfSlices > 3) numberOfSlices = 3;
var scrollAllObservable = client.ScrollAll<ApacheRequest>(processTimePerScroll, numberOfSlices, sc => sc
.MaxDegreeOfParallelism(numberOfSlices)
.Search(s => s
.Index("apache-requests")
.Query(q => 
q.Range(r => r.GreaterThanOrEquals(timestamp)) &&
q.Term(t => t.Servername, model.Domain)
)
.Sort(so => so.Field(f => f.Field(fi => fi.Timestamp)))
)
);
var waitHandle = new ManualResetEvent(false);
var scrollAllObserver = new ScrollAllObserver<ApacheRequest>(
response =>
{
documents = documents.Concat(response.SearchResponse.Documents).ToList();
},
e =>
{
waitHandle.Set();
throw new Exception(e.Message);
},
() => waitHandle.Set()
);

scrollAllObservable.Subscribe(scrollAllObserver);
waitHandle.WaitOne();
var requests = documents;
var count = requests.Count(); //33, 34, 43, 44, and so on
}

当我根据生产数据进行测试时,有时会得到10k以上的结果,所以我需要使用滚动。

我在这里做错了什么?我从不向观察者抛出异常。

我的例子似乎有问题。首先,它不是异步的,但我知道这一点。我找到了一个更好的例子,并根据我的需求进行了调整,每次都完美无瑕。

https://stackoverflow.com/a/56261657/2098652

最新更新