Elasticsearch.Nest 教程系列 2-1 连接:Configuration options | 配置选项
本系列博文是“伪”官方文档翻译(更加本土化),并非完全将官方文档进行翻译,而是在查阅、测试原始文档并转换为自己真知灼见后的“准”翻译。有不同见解 / 说明不周的地方,还请海涵、不吝拍砖 :)
官方文档见此:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/introduction.html
本系列对应的版本环境:ElasticSearch@7.3.1,NEST@7.3.1,IDE 和开发平台默认为 VS2019,.NET CORE 2.1
NEST 默认情况下使用预设的值与 ElasticSearch 集群进行交互,并提供了许多配置选项和组件来修改默认值(行为)。
你可以修改 ConnectionConfiguration 和 ConnectionStrings 的属性以达到修改默认连接行为的效果:
-
ConnectionConfiguration:面向 ElasticSearch.Net。
-
ConnectionStrings:面向 NEST。
配置 ConnectionConfiguration
因为 ConnectionStrings 继承自 ConnectionConfiguration,所以以下选项(方法/属性)适用于 ConnectionConfiguration 和 ConnectionStrings。
-
ApiKeyAuthentication: 与所有请求一起发送到Elasticsearch的 Api Key。
-
BasicAuthentication: 与所有请求一起发送到Elasticsearch的 基本身份验证凭证。
-
ClientCertificate: 为所有 HTTP 请求使用 X509Certificate 认证。你也可以在每一个请求上通过 ClientCertificates 属性来进行设置。
-
ConnectionLimit: 限制并发连接数。
- 对于非 System.Net.Http.CurlHandler 连接,默认 80。
- 对于 System.Net.Http.CurlHandler,取决于 CPU 数量。
- 对于非 CORE CLR,该设置应用于创建 ServicePoint 对象时的 ServicePointManager 对象的 DefaultLConnectionLimit 属性,这会影响默认的 IConnection 实现。
- 对于 CORE CLR,该设置应用于实现了 IConnection 接口且内部使用了 HttpClientHandler 实例的 MaxConnectionsPerServer 属性的 HttpClient 上。
-
DeadTimeout: 超时失效时间,用于设置节点被标记为失效的默认失效超时`因子`。一些连接池可能使用固定的超时时间,而另外的一些则使用此超时时间因子并以指数方式增加。
-
DisableAutomaticProxyDetection: 禁用自动检测代理。
-
DisableDirectStreaming: 确保响应字节在ElasticsearchResponse
上始终可用,默认为 false。 - 依赖于注册的序列化器,该选项会将响应数据先缓存在内存中,存在潜在的性能影响,生产环境不建议使用(置为false)。
-
DisablePing: 是否禁用 ping。
-
EnableDebugMode: 是否启用调试模式。将该选项设置为 true 有助于调试,例如 DisableDirectStreaming() 和 PrettyJson() 以便可以检查原始请求和响应的 JSON 字符串。另外开启该选项后会向服务器获取有错误的完整堆栈信息。
-
EnableHttpCompression: 是否在请求和响应的时候启用 http gzip 压缩传输。
- 若要启用该选项的话,需要在 ElasticSearch 服务上也启用该选项。启用方式见此。
-
EnableHttpPipelining: 是否启用 HTTP Pipeline。
- 同样的,若要启用该选项的话,需要在 ElasticSearch 服务上也启用 http pipeline 选项。
-
EnableTcpKeepAlive: 是否启用 TCP 保持。
- 部署在 windows 上的话,需要设置 ServicePointManager.SetTcpKeepAlive。
-
GlobalHeaders: 设置全局的请求头信息。
- 如自定义的“认证”请求头信息。
-
GlobalQueryStringParameters: 设置全局的查询字符串信息。
- 如若每次都要传输的 ApiKey。
-
IncludeServerStackTraceOnError: 默认 false,强制所有请求都附加“?error_trace=true”查询参数。这会导致 ES 服务发生错误时返回堆栈信息。
-
MaxDeadTimeout: 将节点标记为失效的最长时间。不同的 IConnectionPool 实现可以选择不同的默认值。
-
MaximumRetries: 请求的最大重试次数。
-
MaxRetryTimeout: 最大重试超时时间:限定总的运行时间,包括重试,与 RequestTimeout 分开,当不设置的时候,默认值为 RequestTimeout 设定的值(RequestTimeout 默认为 60s)。
-
RequestTimeout: 用于设定每个请求的超时时间,默认 60s。
- 你可以将这个值设大一点,然后再 ES 服务端设置请求的超时时间。
-
NodePredicate: 注册一个谓词以选择在哪个节点上执行 API 调用。需要注意的时 Sniffing 相关的嗅探请求会忽略该谓词,并始终在所有节点上执行。
- 当使用了支持 嗅探节点 的 IConnectionPool 实现的时候,默认会忽略”仅主节点“可用的常规 API 调用。
- 当使用静态或单节点连接池时,会将你实例化的客户端节点原封不动的进行返回。
-
OnRequestCompleted: ,Action
,请求完成事件,当从 ES 服务端接收到响应的时候会触发。该事件适用于记录日志。多个回调的话可以注册多次。 -
OnRequestDataCreated: Action
,当请求数据创建完成的时候会被触发。多个回调的话可以注册多次。 -
PingTimeout: 设定默认的 ping 超时时间,可用来检测节点是否还存活着。
-
PrettyJson: 强制在所有的请求连接上附加”?pretty=true“请求参数,会返回格式化后的 JSON。同样的,会强制客户端发送格式化的 JSON。默认 false。
-
Proxy: 如果你的连接需要经过代理的话,可以用此选项来指定代理代理的 url。
-
ServerCertificateValidationCallback: 服务端证书验证回调事件,每一个终结点都会调用该事件直到返回 true。一旦返回了 true,则在该主机的 ServiceEndpoint 生命周期内,该终结点都是被验证过的。
-
SkipDeserializationForStatusCodes: 配置特定的状态码跳过反序列化,当你通过代理访问 ES,返回 401,500 状态码的时候,就可以跳过反序列化。
-
SniffLifeSpan: 用于设置嗅探的持续时间戳。在设置的持续时间之前,集群状态被认为是 stale(过期的,不复存在的),应再次执行嗅探。
- IConnectionPool 必须发信号来表示它支持被重新广播,否则,嗅探将永不会被执行。
- 默认时间是 1小时,设置为 null 可以完全禁用该功能。
- 嗅探只会发生在对 SuppotsReseeding 返回 true 的 ConnectionPools 上。
-
SniffOnConnectionFault: 如果连接池支持嗅探,则该配置用于设置是否允许当调用失败时,重新嗅探集群。默认为 true。
-
SniffOnStartup: 如果连接池支持 reseeding,则在第一次使用连接池时进行嗅探嗅探,默认为 true。
-
ThrowExceptions: 跟 C/GO 在响应时的错误检查不同。调用请求的时候,如果在客户端或 ES 服务器上发生了异常,那么客户端在调用 IsValid 的时候会抛出一个异常(除非 SuccessOrKnownError 被设置为 false)。
- 出现此类错误的原因可能是搜索解析器错误,索引丢失异常等等。
-
TransferEncodingChunked: 是否应该使用分块传输编码发送请求,默认为 false。
-
UserAgent: 与请求一起发送的用户代理字符串,对调试很有用,有助于弄清初始化请求 ES 服务器时的客户端和框架版本。
示例:
1 | public ElasticSearchClient(ElasticSearchSettings esSettings) |
配置 ConnectionSettings
以下为仅适用于 ConnectionSettings 的配置选项
-
DefaultDisableIdInference: 禁用给定 CLR 类型的自动 ID 推断。NEST 默认会将命名为 Id 的属性作为 ES 中的 _id 发送给 ES。
-
DefaultFieldNameInferrer: 指定如何从 CLR 属性名推断字段名称。默认情况下,NEST 使用 camel 命名方式,如在 CLR 中声明的属性名为 EmailAddress,将会被推断为 emailAddress 作为 ES 文档的字段名。
-
DefaultIndex: 默认索引名称,当没有显式指定索引名的时候,就会用默认索引名。
-
DefaultMappingFor: 指定如何映射 ES 文档字段和 CLR 的属性。映射关系可以推断给定的 index,id 和 相关 name 以及控制序列化 CLR 属性的行为。
示例:
1 | public ElasticSearchClient(ElasticSearchSettings esSettings) |