如何重用同一个Nest客户端ElasticSearch,但在声明客户端时注入所有索引

sqserrrh  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(190)

我在ElasticSearch中有3个索引,我会一次一个地查询它们(这意味着-我希望在任何时候只有一个索引的结果)。如何声明ElasticSearch客户端和重用?

在SearchRequest中添加索引名看起来不像是一个选项,因为当我在启动客户端时没有给出任何默认索引名时,它会给出异常。添加下面的代码,任何帮助都是非常感谢的。

string cloudid = "something";
            var credentials = new BasicAuthenticationCredentials("something", "something");
            var connectionPool = new CloudConnectionPool(cloudid, credentials);
            var settings = new ConnectionSettings(connectionPool);
            var client = new ElasticClient(settings); //EXCEPTION HERE THAT - Index Name is NULL

ISearchRequest searchRequest = new SearchRequest("indexname")
            {
                Query = new TermQuery { Field = Infer.Field<Doctor>(d => d.FirstName), Value = "FirstName73069" }, 
                Size = 10000
            };

            var secondSearchResponse = await client.SearchAsync<Doctor>(searchRequest);

这是我的代码,它在第5行中断(添加了注解)。注意:对于我的用例,我必须使用SearchRequest对象。请相应地提出建议。

使用Nest 7.17.4版本。

nnsrf1az

nnsrf1az1#

当无法为请求解析其他索引名时,使用默认索引名。

如果要在创建连接时将不同的CLR类型Map到不同的索引,可以使用DefaultMappingFor

new ConnectionSettings()
.DefaultIndex("defaultindex")                                            .DefaultMappingFor<Index1>(m => m.IndexName("index1"))
.DefaultMappingFor<Index2>(m => m.IndexName("index2"))

上面的查询将默认索引定义为“defaultindex”,并分别为模型Index1和Index2定义索引

在使用新的SearchRequest()时,将根据设置推断出的“index1”来查询请求。

也可以将索引名指定为SearchRequest(“index1”)

相关问题