在基本的 hello world 应用程序中使用 Nest 的 Elastic Search 结果不一致
Inconsistent Elastic Search results using Nest in basic hello world application
我创建这个应用程序是为了测试 ES & Nest 的基本功能,所有这些都是从 Nest 的教程站点复制的。
如果我设置一个断点并单步执行代码,它可以正常工作,但如果我让它 运行 而没有单步执行 returns 0 个文档并爆炸。 ES 是否需要一些时间来索引文档或其他什么?
谢谢。
这是 ES 2.1.1
using System;
using System.Linq;
using Nest;
namespace NestTest
{
public class Person
{
public string id { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
}
class Program
{
static void Main(string[] args)
{
var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(
node,
defaultIndex: "my-application"
);
var client = new ElasticClient(settings);
client.DeleteIndex("my-application");
var person = new Person
{
id = "1",
firstname = "martijn",
lastname = "laarman"
};
client.Index(person);
var searchResults = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.Term(p => p.firstname, "martijn")
)
);
// this is 0 most of the time
Console.WriteLine("Document count = {0}", searchResults.Documents.Count());
var martijn = GetMartijn(client);
ShowMartijn(martijn);
}
private static void ShowMartijn(Person m)
{
Console.WriteLine(string.Format("{0} {1}", m.firstname, m.lastname));
}
private static Person GetMartijn(ElasticClient client)
{
var searchResults = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.Term(p => p.firstname, "martijn")
)
);
return searchResults.Documents.First();
}
}
}
它 returns 零文档,因为 Elasticsearch 需要一些时间才能搜索索引文档。开箱即为1秒。这是默认的刷新间隔。您的代码中没有这样的延迟,因此当您单步执行代码与让它 运行 免费时,观察结果会有所不同。为确保索引文档可搜索,请在调用 Search()
命令之前强制刷新:
client.Refresh();
您的代码很可能由于行中的错误假设而崩溃
return searchResults.Documents.First();
这假设 Documents
不为空。为了使代码更可靠,可以在使用First()
之前检查Documents
的Count
属性的值。但这只是一个 Hello World 程序:)
我创建这个应用程序是为了测试 ES & Nest 的基本功能,所有这些都是从 Nest 的教程站点复制的。
如果我设置一个断点并单步执行代码,它可以正常工作,但如果我让它 运行 而没有单步执行 returns 0 个文档并爆炸。 ES 是否需要一些时间来索引文档或其他什么?
谢谢。 这是 ES 2.1.1
using System;
using System.Linq;
using Nest;
namespace NestTest
{
public class Person
{
public string id { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
}
class Program
{
static void Main(string[] args)
{
var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(
node,
defaultIndex: "my-application"
);
var client = new ElasticClient(settings);
client.DeleteIndex("my-application");
var person = new Person
{
id = "1",
firstname = "martijn",
lastname = "laarman"
};
client.Index(person);
var searchResults = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.Term(p => p.firstname, "martijn")
)
);
// this is 0 most of the time
Console.WriteLine("Document count = {0}", searchResults.Documents.Count());
var martijn = GetMartijn(client);
ShowMartijn(martijn);
}
private static void ShowMartijn(Person m)
{
Console.WriteLine(string.Format("{0} {1}", m.firstname, m.lastname));
}
private static Person GetMartijn(ElasticClient client)
{
var searchResults = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.Term(p => p.firstname, "martijn")
)
);
return searchResults.Documents.First();
}
}
}
它 returns 零文档,因为 Elasticsearch 需要一些时间才能搜索索引文档。开箱即为1秒。这是默认的刷新间隔。您的代码中没有这样的延迟,因此当您单步执行代码与让它 运行 免费时,观察结果会有所不同。为确保索引文档可搜索,请在调用 Search()
命令之前强制刷新:
client.Refresh();
您的代码很可能由于行中的错误假设而崩溃
return searchResults.Documents.First();
这假设 Documents
不为空。为了使代码更可靠,可以在使用First()
之前检查Documents
的Count
属性的值。但这只是一个 Hello World 程序:)