gpt4 book ai didi

c# - Elasticsearch 查询第一次慢

转载 作者:行者123 更新时间:2023-12-03 01:45:01 27 4
gpt4 key购买 nike

在工作中,我建立了一个开发环境,我们正在该环境上测试电子商务网站的 Elasticsearch 。我注意到查询运行得非常快(与sql server相比)。但是,第一次执行查询时,要花很多时间才能最终在目录中呈现产品。初始查询后,一切开始很快。

如果我离开网站并在发生相同情况后重新输入一段时间。

顺便说一下,我们的应用程序正在使用NEST(高级C#客户端),显然对于第一个查询,它需要执行一些操作来延迟搜索。
反正有防止这种情况发生的方法吗?我可以配置NEST在应用程序启动时执行此操作吗?

PD:elasticsearch 5.4

更新:

这就是我在NinjectModule中初始化ElasticClient和ConnectionSettings的方式:

public class ElasticRepositoryInjection : NinjectModule
{
public override void Load()
{
var connectionPool = new SingleNodeConnectionPool(new Uri(ConfigurationManager.AppSettings["elastic.server"]));
var elasticSearchConnectionSettings = new ConnectionSettings(connectionPool)
.DefaultIndex("isolution")
.EnableTcpKeepAlive(TimeSpan.FromMilliseconds(2000), TimeSpan.FromMilliseconds(2000))
.DisableDirectStreaming();

Bind<ConnectionSettings>().ToConstant(elasticSearchConnectionSettings).InSingletonScope();

var client = new ElasticClient((Kernel as StandardKernel).Get<ConnectionSettings>());
Bind<ElasticClient>().ToConstant(client).InSingletonScope();

client.Search<Domain.Isolution.ElasticSearch.Product>(s => s
.Query(q => q.MatchAll()));
}
}

最佳答案

NEST在内部使用缓存,例如对于成员访问lambda表达式的字符串,键入JsonContract等,这将在第一个请求上构建。

NEST内置没有任何东西可以预先执行此启动,这故意是一个懒惰的操作。但是,在应用程序启动时,您可以初始化a singleton instance of IElasticClient ,向Elasticsearch发出搜索请求以初始化缓存,然后将客户端实例提供给需要它的那些组件。缓存的初始化可以通过任何一种方式执行,但是至少这样,第一个用户调用不会等待。

关于c# - Elasticsearch 查询第一次慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44725584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com