ElasticSearch C#:能否通过单个.Search查询跨多索引查询?
在Elasticsearch单个Search查询中实现跨多索引查询(C# NEST示例)
当然可以啦!在使用NEST(Elasticsearch的官方.NET客户端)时,实现单个Search查询跨多个索引检索非常简单,根本不需要拆分多次请求。你只需要在Index()方法中传入多个目标索引的名称就行,下面我结合你的代码示例给你补全实现:
ConnectionSettings connectionSettings = new ConnectionSettings(new Uri("http://localhost:9200/")); // 本地节点 ElasticClient elasticClient = new ElasticClient(connectionSettings); string index1 = "local-neal-test-other1-2018.04.06"; string index2 = "local-neal-test-other2-2018.04.06"; // 跨多索引的查询请求 var response = elasticClient.Search<Document2>(s => s // 方式1:用逗号拼接多个索引名称 .Index($"{index1},{index2}") // 或者用方式2:传入索引数组,可读性更好 // .Index(new[] { index1, index2 }) .Query(q => q // 这里替换成你的实际查询逻辑,比如匹配某个字段 .Match(m => m .Field(f => f.YourTargetField) .Query("your search keyword") ) ) );
另外还有个更灵活的方式:如果你的索引有统一的命名规则(比如都是local-neal-test-*-2018.04.06这种格式),还可以用通配符来匹配所有符合模式的索引,比如:
.Index("local-neal-test-*-2018.04.06")
这样的单个Search请求会同时在你指定的所有索引中执行查询,返回所有符合条件的文档,完全满足跨索引检索的需求。
内容的提问来源于stack exchange,提问作者NealWalters
相关产品推荐
相关产品推荐

