配置选项(Connecting options)
使用Elasticsearch.Net和NEST连接到Elasticsearch很容易,但是您完全有可能想要更改默认的连接行为。低级客户端的ConnectionConfiguration上有许多配置选项,高级别客户端的ConnectionSettings上有许多配置选项,可用于控制客户端与Elasticsearch的交互方式。
ConnectionConfiguration上的选项
以下是ConnectionConfiguration上可用的连接配置选项的列表;由于ConnectionSettings是从ConnectionConfiguration派生的,因此这些选项可用于低级和高级客户端:
ApiKeyAuthentication
与所有请求一起发送到Elasticsearch的Api密钥
BasicAuthentication
基本身份验证凭证,将所有请求发送到Elasticsearch
ClientCertificate
使用X509Certificate对所有HTTP请求进行身份验证。您还可以使用ClientCertificates根据个人要求设置它们
ClientCertificates
使用以下证书对所有HTTP请求进行身份验证。您还可以使用ClientCertificates根据个人要求设置它们
ConnectionLimit
限制可以打开到端点的并发连接数。对于所有不基于System.Net.Http.CurlHandler的IConnection实现,默认值为80。对于基于System.Net.Http.CurlHandler的那些,默认为Environment.ProcessorCount。 对于桌面CLR,此设置将在创建ServicePoint对象时应用于ServicePointManager对象的DefaultConnectionLimit属性,从而影响默认的IConnection实现。 对于Core CLR,此设置适用于默认IConnection实现内HttpClient使用的HttpClientHandler实例上的MaxConnectionsPerServer属性。
DeadTimeout
设置节点被标记为失效时的默认失效超时因子。一些连接池可能使用固定超时,而另一些连接池则使用此因子并将其成倍增加
DisableAutomaticProxyDetection
禁用自动检测代理
DisableDirectStreaming
确保响应字节在ElasticsearchResponse <T>上始终可用
IMPORTANT
根据注册的序列化程序,这可能导致响应首先在内存中进行缓冲,从而可能影响性能。
DisableMetaHeader
默认情况下,禁用所有请求中包含的元标头。该标头包含有关客户端和运行时的轻量级信息。
DisablePing
第一次使用节点时或标记为已失效后第一次使用节点时,会向该节点发送超时时间很短的ping命令,以确保当节点仍然失效时,它会以最快的速度报告可能的。如果您希望在较慢的原始请求上失败,可以在此处全局禁用这些ping操作
EnableDebugMode
打开有助于调试的设置,例如DisableDirectStreaming()和PrettyJson(),以便可以检查原始请求和响应JSON。它还总是向服务器询问有关错误的完整堆栈跟踪
EnableHttpCompression
启用gzip压缩的请求和响应。
EnableHttpCompression
启用gzip压缩的请求和响应。
IMPORTANT
您需要在Elasticsearch上配置http压缩才能使用此功能
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html
EnableHttpPipelining
允许请求通过管道传递。
http://en.wikipedia.org/wiki/HTTP_pipelining
NOTE
为了使它正常工作,还必须在Elasticsearch中启用HTTP流水线。
EnableTcpKeepAlive
在TCP连接上设置keep-alive选项。
对于桌面CLR,设置ServicePointManager.SetTcpKeepAlive
GlobalHeaders
标头的集合,将随每个请求一起发送。在您始终需要传递标头的情况下很有用,例如自定义身份验证标头
GlobalQueryStringParameters
查询字符串参数的集合,将随每个请求一起发送。在您始终需要传递参数的情况下很有用,例如API密钥。
IncludeServerStackTraceOnError
强制所有请求附加?error_trace = true querystring参数,导致Elasticsearch作为堆栈化异常的一部分返回堆栈跟踪。默认为false
MaxDeadTimeout
设置可以将节点标记为失效的最长时间。 IConnectionPool的不同实现可以选择不同的默认值。
MaximumRetries
给定请求的最大重试次数
MaxRetryTimeout
限制总运行时间(包括重试),与RequestTimeout分开 如果未指定,则默认为RequestTimeout,其本身默认为60
NodePredicate
注册一个谓词以选择要在其上执行API调用的节点。请注意,嗅探请求会忽略此谓词,并且始终在所有节点上执行。当使用支持结点播种的IConnectionPool实现时,这将默认为从常规API调用中省略仅主节点。当使用静态或单节点连接池时,假定您实例化客户端所用的节点列表应全部保留。
OnRequestCompleted
注册一个Action <T>,当从Elasticsearch接收到响应时将调用它。这对于实现自定义日志记录很有用。可以通过多次调用来注册多个回调
OnRequestDataCreated
注册创建RequestData时调用的Action <T>。可以通过多次调用来注册多个回调
PingTimeout
设置ping请求的默认ping超时(以毫秒为单位),用于确定节点是否处于活动状态。 ping应该尽快失败。
PrettyJson
强制所有请求附加?pretty = true querystring参数,从而使Elasticsearch返回格式化的JSON。默认为false
Proxy
如果您的连接必须通过代理,请使用此方法指定代理网址
RequestTimeout
设置对Elasticsearch的每个请求的默认超时(以毫秒为单位)。默认为60秒。
NOTE
您可以在此处将此值设置为较高的值,并在Elasticsearch一侧指定超时
ServerCertificateValidationCallback
注册一个ServerCertificateValidationCallback,每个终结点都会调用它,直到返回true。在此回调返回true之后,将在该主机的ServiceEndpoint的生存期内对终结点进行验证。
SkipDeserializationForStatusCodes
配置客户端以跳过某些状态代码的反序列化,例如:您在代理后面运行Elasticsearch,该代理返回401、500的HTML
SniffLifeSpan
设置持续时间,在此持续时间之前,群集状态被认为是陈旧的,应再次执行嗅探。 IConnectionPool必须发信号表示它支持重新播种,否则嗅探将永远不会发生。默认为1小时。设置为null可完全禁用。嗅探只会发生在对SupportsReseeding返回true的ConnectionPools上
SniffOnConnectionFault
如果连接池支持重新播种,则在呼叫失败时启用群集的重新嗅探。默认为true
SniffOnStartup
如果连接池支持重新播种,则在该连接池的首次使用时启用嗅探功能。默认为true
ThrowExceptions
当调用在客户端或Elasticsearch服务器上导致异常时,在客户端上不执行c / go之类的错误检查。IsValid确实会在客户端上引发异常(SuccessOrKnownError为false时除外)。
出现此类异常的原因可能是搜索解析器错误,索引缺失异常等...
TransferEncodingChunked
是否应使用分块的传输编码发送请求。默认为假
UserAgent
与请求一起发送的用户代理字符串。对于调试目的有用,有助于了解启动对Elasticsearch的请求的客户端和框架版本
带有ElasticLowLevelClient的ConnectionConfiguration(ConnectionConfiguration with ElasticLowLevelClientedit)
这是演示使用低级客户端设置几个配置选项的示例
var connectionConfiguration = new ConnectionConfiguration()
.DisableAutomaticProxyDetection()
.EnableHttpCompression()
.DisableDirectStreaming()
.PrettyJson()
.RequestTimeout(TimeSpan.FromMinutes(2));
var lowLevelClient = new ElasticLowLevelClient(connectionConfiguration);
|
ConnectionSettings上的选项(Options on ConnectionSettings)
以下是ConnectionSettings上可用的连接配置选项的列表:
DefaultDisableIdInference
禁用给定CLR类型的自动ID推断。 默认情况下,NEST将使用CLR类型上名为Id的属性的值作为_id发送给Elasticsearch。添加类型将针对该CLR类型禁用此行为。如果应该为所有CLR类型禁用ID推断,请使用DefaultDisableIdInference
DefaultFieldNameInferrer
指定如何从CLR属性名称推断字段名称。 默认情况下,NEST骆驼保护套属性名称。例如,CLR属性EmailAddress将被推断为“ emailAddress” Elasticsearch文档字段名称
DefaultIndex
当未明确指定索引且未为请求指定的给定CLR类型指定默认索引时,用于请求的默认索引。
DefaultMappingFor
指定如何推断给定CLR类型的映射。映射可以推断给定CLR类型的索引,ID和关系名称,以及CLR属性的控件序列化行为。
使用ElasticClient的ConnectionSettings(ConnectionSettings with ElasticClient)
这是一个示例,演示如何使用高级客户端设置几个配置选项
var connectionSettings = new ConnectionSettings()
.DefaultMappingFor<Project>(i => i
.IndexName("my-projects")
.IdProperty(p => p.Name)
)
.EnableDebugMode()
.PrettyJson()
.RequestTimeout(TimeSpan.FromMinutes(2));
var client = new ElasticClient(connectionSettings);
|
NOTE
也可以直接在节点URI上指定基本身份验证凭据
var uri = new Uri("http://username:password@localhost:9200");
var settings = new ConnectionConfiguration(uri);
|
但这在具有多个节点的连接池中使用时可能会很尴尬,尤其是当所使用的连接池是能够自我播种的连接池时。因此,建议您在ConnectionSettings上指定凭据。