如何使用 MultiTermVectorsAsync

How to use MultiTermVectorsAsync

我正在尝试使用 NEST 调用以下查询

GET 123_original/_doc/_mtermvectors
{
  "ids": [
    "9a271078-086f-4f4b-8ca0-16376c2f49a7",
    "481ce3db-69bf-4886-9c38-fcb878d44925"
  ],
  "parameters": {
    "fields": ["*"],
    "positions": false,
    "offsets": false,
    "payloads": false,
    "term_statistics": false,
    "field_statistics": false
  }
}

NEST API(我认为)看起来像这样

var term = await elasticClient.MultiTermVectorsAsync(x =>
{
    return x.Index(indexOriginal)    // 123_original
        .Type(typeName)              // _doc
        .GetMany<ElasticDataSet>(ids.Keys) // list of strings
        .Fields("*")
        .FieldStatistics(false)
        .Positions(false)
        .Offsets(false)
        .TermStatistics(false)
        .Payloads(false);
});

问题是上面的API返回了以下错误 Index name is null for the given type and no default index is set. Map an index name using ConnectionSettings.DefaultMappingFor<TDocument>() or set a default index using ConnectionSettings.DefaultIndex().

这是它尝试执行的查询,其中包含索引但缺少 ID,但在设置 ID 后可在 Kibana 中运行。 123_original/_doc/_mtermvectors?fields=%2A&field_statistics=false&positions=false&offsets=false&term_statistics=false&payloads=false

我找不到有关如何使用 NEST 使用多术语向量的文档。

NEST 中的多术语向量 API 不提供仅设置 ID 的能力,它始终假定您正在传递 "docs"

即使通过

client.MultiTermVectors(mt => mt
    .Index("123_original")
    .Type("_doc")
    .GetMany<object>(ids)
    .Fields("*")
    .Positions(false)
    .Offsets(false)
    .Payloads(false)
    .TermStatistics(false)
    .FieldStatistics(false)
);

每个 id_index_type 是从 GetMany<T>

中的 object 推断出来的
POST http://localhost:9200/123_original/_doc/_mtermvectors?pretty=true&fields=*&positions=false&offsets=false&payloads=false&term_statistics=false&field_statistics=false 
{
  "docs": [
    {
      "_index": "users",
      "_type": "object",
      "_id": "9a271078-086f-4f4b-8ca0-16376c2f49a7"
    },
    {
      "_index": "users",
      "_type": "object",
      "_id": "481ce3db-69bf-4886-9c38-fcb878d44925"
    }
  ]
}

我认为这可能会在未来以更易用的方式在客户端公开。

好消息是,您可以使用 IElasticClient 上公开的低级客户端提交您想要的确切查询,并且仍然会得到高级响应

MultiTermVectorsResponse response = 
    client.LowLevel.Mtermvectors<MultiTermVectorsResponse>("123_original", "_doc", PostData.Serializable(new 
    { 
        ids = ids,
        parameters = new
        {
            fields = new[] { "*" },
            positions = false,
            offsets = false,
            payloads = false,
            term_statistics = false,
            field_statistics = false
        }
    }));

这将发送以下请求:

POST http://localhost:9200/123_original/_doc/_mtermvectors?pretty=true 
{
  "ids": [
    "9a271078-086f-4f4b-8ca0-16376c2f49a7",
    "481ce3db-69bf-4886-9c38-fcb878d44925"
  ],
  "parameters": {
    "fields": [
      "*"
    ],
    "positions": false,
    "offsets": false,
    "payloads": false,
    "term_statistics": false,
    "field_statistics": false
  }
}