首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Elasticsearch .NET和NEST 6.x :如何从多个索引中MultiGet文档

使用Elasticsearch .NET和NEST 6.x :如何从多个索引中MultiGet文档
EN

Stack Overflow用户
提问于 2018-06-25 22:46:44
回答 1查看 1.1K关注 0票数 0
代码语言:javascript
复制
var ids = new Dictionary<string, List<string>>();
ids["Topic"] = new List<string> {"KL7KJ2QBWD77yvpxyjvd", "374wJ2QBWD77yvpxDjpX", "B7499GMBWD77yvpxFzgW"};
ids["Prod"] = new List<string>();
ids["Account"] = new List<string>();

我做了这个流畅的嵌套查询:

代码语言:javascript
复制
var results = client.MultiGet(m => 
m.Index("topics").GetMany<Topic>(ids["Topic"])

.Index("prods").GetMany<Prod>(ids["Prod"])

.Index("accounts").GetMany<Account>(ids["Account"])

它正在生成下面的请求。我们看到请求只使用了最后一个索引集,即"accounts“(这不是我需要的):

代码语言:javascript
复制
http://localhost:9200/accounts/_mget?pretty=true
{
  "docs": [
    {
      "_type": "Topic",
      "_id": "KL7KJ2QBWD77yvpxyjvd"
    },
    {
      "_type": "Topic",
      "_id": "374wJ2QBWD77yvpxDjpX"
    },
    {
      "_type": "Topic",
      "_id": "B7499GMBWD77yvpxFzgW"
    }
  ]
}
# Response:
{
  "docs" : [
    {
      "_index" : "accounts",
      "_type" : "Topic",
      "_id" : "KL7KJ2QBWD77yvpxyjvd",
      "found" : false
    },
    {
      "_index" : "accounts",
      "_type" : "Topic",
      "_id" : "374wJ2QBWD77yvpxDjpX",
      "found" : false
    },
    {
      "_index" : "accounts",
          "_type" : "Topic",
      "_id" : "B7499GMBWD77yvpxFzgW",
      "found" : false
    }
  ]
}

事实上,我想在流畅的嵌套中创建以下(有效的) Elasticsearch查询请求(没有特定的索引):

代码语言:javascript
复制
http://localhost:9200/_mget?pretty=true
{
  "docs": [
    {
      "_index": "topics",
      "_type": "Topic",
      "_id": "KL7KJ2QBWD77yvpxyjvd"
    },
    {
      "_index": "topics",
      "_type": "Topic",
      "_id": "374wJ2QBWD77yvpxDjpX"
    },
    {
      "_index": "topics",
      "_type": "Topic",
      "_id": "B7499GMBWD77yvpxFzgW"
    }
  ]
}

在fluent NEST中,有没有一种方法可以为每个ids列表指定每个索引/类型?

当然,如果我将特定的if添加到if“Prod”和if“Account”,这将为这些生成正确的if……例如:

代码语言:javascript
复制
http://localhost:9200/_mget?pretty=true
{
  "docs": [
    {
      "_index": "topics",
      "_type": "Topic",
      "_id": "KL7KJ2QBWD77yvpxyjvd"
    },
    {
      "_index": "prods",
      "_type": "Prod",
      "_id": "xxxxx"
    },
    {
      "_index": "accounts",
      "_type": "Account",
      "_id": "yyyyy"
    }
  ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 07:13:30

每个GetMany<T>(...)接受第二个参数,该参数是一个委托,用于进一步描述调用,包括提供索引名称

代码语言:javascript
复制
var ids = new Dictionary<string, List<string>>
{
    { "Topic", new List<string> { "topic1", "topic2", "topic3" } },
    { "Prod", new List<string> { "prod1", "prod2", "prod3" } },
    { "Account", new List<string> { "account1", "account2", "account3" } }
};

var multiGetResponse = client.MultiGet(m => m
    .GetMany<Topic>(ids["Topic"], (op, id) => op
        .Index("topics")
    )
    .GetMany<Prod>(ids["Prod"], (op, id) => op
        .Index("prods")
    )
    .GetMany<Account>(ids["Account"], (op, id) => op
        .Index("accounts")
    )
);

这会导致如下的请求

代码语言:javascript
复制
POST http://localhost:9200/_mget
{
  "docs": [
    {
      "_index": "topics",
      "_type": "topic",
      "_id": "topic1"
    },
    {
      "_index": "topics",
      "_type": "topic",
      "_id": "topic2"
    },
    {
      "_index": "topics",
      "_type": "topic",
      "_id": "topic3"
    },
    {
      "_index": "prods",
      "_type": "prod",
      "_id": "prod1"
    },
    {
      "_index": "prods",
      "_type": "prod",
      "_id": "prod2"
    },
    {
      "_index": "prods",
      "_type": "prod",
      "_id": "prod3"
    },
    {
      "_index": "accounts",
      "_type": "account",
      "_id": "account1"
    },
    {
      "_index": "accounts",
      "_type": "account",
      "_id": "account2"
    },
    {
      "_index": "accounts",
      "_type": "account",
      "_id": "account3"
    }
  ]
}

已通过小写从CLR POCO名称推断出"_type"名称,这可以由overriding the type name inferrer on Connection Settings.更改

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51026230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档