我有一个 4 节点的 elasticsearch 集群。我有一个 .net 控制台应用程序,旨在用来自 sql 的数据填充集群。只要我将添加(或删除)记录的速度保持在相当低的水平,一切都可以正常工作。如果我最终增加线程数,我会在控制台应用程序中看到超时错误。该集群共有 48 个内核,索引一条记录所需的平均时间约为 0.1 秒。
我已经能够让它每秒处理大约 7000 条记录(文档)。我从来没有看到从 elasticsearch.net 抛出的任何表明资源不足的异常。我从未看到任何索引队列超载。服务器的 CPU 峰值永远不会超过 10%。看起来问题不是集群或其配置,而是嵌套连接中的问题。这是我的连接代码:
//set up the es client
Uri node = new Uri(ConfigurationManager.AppSettings["ESConnectionString"]);
var connectionPool = new SniffingConnectionPool(new[] { node });
ConnectionSettings settings = new ConnectionSettings(connectionPool);
settings.SetDefaultPropertyNameInferrer(p => p); //ditch the camelcase
settings.SniffOnConnectionFault(true);
settings.SniffOnStartup(true);
settings.SniffLifeSpan(TimeSpan.FromMinutes(1));
settings.SetPingTimeout(3000);
settings.SetTimeout(5000);
settings.MaximumRetries(5);
//settings.SetMaximumAsyncConnections(20);
settings.SetDefaultIndex("dummyindex");
settings.SetBasicAuthentication(ConfigurationManager.AppSettings["ESUser"], ConfigurationManager.AppSettings["ESPass"]);
ElasticClient client = new ElasticClient(settings);
Run Code Online (Sandbox Code Playgroud)
我使用 http.basic 身份验证设置了集群,但我尝试打开和关闭它,但没有任何区别。以下是来自 ES 节点的一些相关设置:
discovery.zen.minimum_master_nodes: 2
discovery.zen.fd.ping_timeout: 30s
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["CACHE01","CACHE02","CACHE03","CACHE04"]
cluster.routing.allocation.node_concurrent_recoveries: 5 …Run Code Online (Sandbox Code Playgroud) 有没有人有这个问题中所提出的如何使用int RefId的实际示例?
我正在尝试进行身份验证,但是我需要将userAuth数据与我自己的用户表结合使用。问题是我不知道如何将附加参数传递给“ / register”方法。我想我正在寻找类似“ OnAddUser”的事件,该事件使我可以向混合中添加一些其他参数。
我设法使用户注册工作非常迅速,这非常容易。也许问题是这太容易了?我可以看到它的工作原理,但是我不知道如何在它和数据库之间进行转换。
字典方法或RefId方法都可能对我有用,对我而言,如何使用它们都不是很明显。
是否可以完全覆盖创建用户?我发现此代码:
MyServices.cs
看起来好像是在用“ / register”代替创建用户,但是还有其他一些文章建议您不能覆盖ServiceStack DTO,必须使用默认表。
我有一个包含模型、服务和 api 项目的 .net 核心项目。我对这个项目的最初目标是让枚举以更“代码优先”的方式工作。我只想能够修改枚举并相应地更新数据库和查找表。在花了太多时间试图弄清楚如何做到这一点之后,我决定创建一个特殊的枚举类并使用“HasData”手动为其设定种子。我以前做过这个,没有遇到过问题。我做的最后一个项目是 .Net Core 2.1。该项目使用的是 2.2。我不知道我是否发现了一个奇怪的错误,或者我只是做错了什么。我的“服务”项目是 DbContext 所在和大部分相关代码所在的地方。
我有一个看起来像的模型:
public class Employee : IEmployee
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name = "Id")]
public int Id { get; set; }
[StringLength(512, ErrorMessage = "The first name cannot be longer than 512 characters")]
[Display(Name = "First Name")]
[Required]
public string FirstName { get; set; }
[StringLength(512, ErrorMessage = "The last name cannot be longer than 512 characters")]
[Display(Name = "Last Name")]
[Required]
public string LastName { get; set; } …Run Code Online (Sandbox Code Playgroud) 有谁知道如何使用嵌套进行多次聚合?不幸的是,我发现了很多示例,但它们都不起作用。
这是我所拥有的:
Vehicles fields = new Vehicles();
//create a terms query
var query = new TermsQuery
{
IsVerbatim = true,
Field = "VehicleOwnerId",
Terms = new string[] { 25 },
};
var aggregations = new Dictionary<string, IAggregationContainer>
{
{ "years", new AggregationContainer
{
Terms = new TermsAggregation(nameof(fields.Year))
{
Field = new Field(nameof(fields.Year))
}
}
}
//,
//{ "makes", new AggregationContainer
// {
// Terms = new TermsAggregation("Make")
// {
// Field = new Field(nameof(fields.Make))
// }
// }
//}
}; …Run Code Online (Sandbox Code Playgroud)