如何使用 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
}
}
我正在尝试使用 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
}
}