我正在开发一个使用 MySQL 作为其数据库的应用程序。但是,我正在添加一个使用 ElasticSearch 的带有自动完成/“按您输入的结果”的搜索功能。将相关数据从 MySQL 获取到 ElasticSearch 不是问题,我的搜索工作正常。
但是,我确实有一些性能问题,但仅在进行“第一个”搜索查询时,这大约需要 1-5 秒。“第一次”是指几分钟内的第一次搜索;第二次搜索在第一次搜索后 10 秒内获得接近即时的结果,而第二次搜索在第一次搜索后 5 分钟才获得结果,但要经过明显的延迟。
我最初的想法是,设置 HTTP 连接(由 .NET Framework 汇集)会导致额外的延迟,但即使不使用 DNS 名称来解析,在快速 LAN 网络上这也需要 1-5 秒似乎很奇怪弹性搜索服务器。
我应该查看其他任何可能的罪魁祸首/通常的嫌疑人吗?还是初始 HTTP 连接延迟看起来合理(我会怎么做?)?
搜索是这样完成的(请注意,ElasticSearch/NEST 客户端作为单例进行管理并且已经创建):
public IEnumerable<Person> Search(ElasticClient esclient, IEnumerable<string> queryParts, int groupId) {
// Make the search query and return the results.
return esclient.Search<Person>(s => s
.Query(q =>
q.Terms(p => p.FirstName, queryParts) ||
q.Terms(p => p.LastName, queryParts)
)
.Filter(f => f
.Term(p => p.MemberOfGroups, new int[] { groupId })
)
).Documents;
}
编辑:我的 ElasticClient 是这样创建的:
new ElasticClient(new ConnectionSettings(new Uri(esUrl), index));