Elasticsearch NEST-找不到索引后的文档

时间:2018-09-06 18:15:38

标签: .net elasticsearch nest

我正在使用.NET NEST在Elasticsearch中进行搜索。

当我为文档建立索引并立即对其进行搜索时,找不到它:

var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node);
settings.DefaultIndex("products_test");
settings.DisableDirectStreaming(true);
ElasticClient client = new ElasticClient(settings);

Product p = new Product("My Product", "6");
client.IndexDocument(p);

var results = client.Search<Product>(s => s.Query(q => q.MatchAll()));

results.HitsMetadata.Total //is 0 and results.Hits are empty

为什么?

我必须以某种方式承诺吗?

谢谢

编辑:但是当我再次运行控制台应用程序并注释掉创建的内容时,找到了文档。

1 个答案:

答案 0 :(得分:2)

在文档为written to a shard segment of an index之前,索引文档无法搜索。 refresh_interval index setting负责这种情况的发生频率,默认值为1秒。请注意,索引后的索引文档可立即获得,可通过ID检索。

为文档建立索引时,您可以指定在建立索引后进行刷新,以便在返回响应后可以搜索该文档

var client = new ElasticClient();

client.Index(new MyDocument(1) { Message = "foo" }, i => i
    .Refresh(Refresh.WaitFor)
);

或调用刷新API

client.Refresh("my-index");

但是,在生产环境中,通常不建议这样做,因为在资源和段合并操作方面,编写许多小段将对群集产生较大的性能影响。但是,它可用于临时和测试目的。