弹性NEST返回不一致的结果

如何解决弹性NEST返回不一致的结果

我正在尽最大的努力来理解nesT的工作原理,但是我认为我有部分工作。我已将10.000个文档导入到本地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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?