在 NEST 中搜索没有特定类型 class 的特定查询 (TermsQuery)
Search for a specific query (TermsQuery) without type-specific class in NEST
第一次使用 ElasticSearch(使用 NEST 作为包装器)。我想在外部 ElasticSearch 数据库中搜索。
我只是想 运行 对名为 cvrNummer
的特定字段进行测试查询。我有以下代码,它无法编译,因为:The type arguments for method 'ElasticSearch.Search<T> .. ', cannot be inferred from the usage.
我想这是因为我无法指定特定类型 class。挑战是我不知道那个。
我的问题是:我如何运行下面的查询,而不完全知道我得到了什么(制作特定类型的模型)?如果我需要那个模型,在缺少文档的情况下我如何 "make" 该模型?
我的代码:
var settings = new ConnectionSettings(new Uri(_path)).
BasicAuthentication(_username,_password);
var client = new ElasticClient(settings);
var es_query = new TermsQuery
{
Name = "named_query",
Boost = 1.1,
Field = "cvrNummer",
Terms = new string[] { "36406208" }
};
client.Search(es_query);
我只有文档:
curl -u "<brugernavn>:<password>" -XPOST http://URL -d'
{ "from" : 0, "size" : 1,
"query": {
"term": {
"cvrNummer": VALUE
}
}
}
编辑更多数据:
来自文档的文档模型:
curl -u "<brugernavn>:<password>" -XGET http://distribution.virk.dk/cvr-permanent/_mapping
完整搜索示例:
curl -u "<brugernavn>:<password>" -XPOST http://distribution.virk.dk/cvr-permanent/_search -d'
{ "from" : 0, "size" : 1,
"query": {
"term": {
"cvrNummer": 10961211
}
}
}
'
您可以将 "documentation" curl 请求转换为 C# api 语法,如下所示:
client.Search<dynamic>(s => s //dynamic because you don't know the structure
.From(0)
.Size(1)
.Index("cvr-permanent") // index you are searching, taken from url of curl
.AllTypes() // search all types in that index
.Query(q => q.Terms(t =>
t.Name("named_query")
.Boost(1.1f)
.Field("cvrNummer")
.Terms("36406208"))));
如果您不喜欢 dynamic
- 您可以使用 JObject
,如果您使用 dynamic
,这将是 Search
返回的真实类型:
var response = client.Search<JObject>(...);
然后您可以像这样访问匹配的文档:
foreach (var document in result.Documents) {
// if you used `JObject`:
Console.WriteLine(document["account_number"]);
// if you used `dynamic`:
Console.WriteLine(document.account_number);
}
如果您使用了 JObject
,您还可以在结果 JObject
上调用 ToString()
(因此,上面示例中的 document.ToString()
)以查看完整的 json 的返回文档,以便您了解其结构。
第一次使用 ElasticSearch(使用 NEST 作为包装器)。我想在外部 ElasticSearch 数据库中搜索。
我只是想 运行 对名为 cvrNummer
的特定字段进行测试查询。我有以下代码,它无法编译,因为:The type arguments for method 'ElasticSearch.Search<T> .. ', cannot be inferred from the usage.
我想这是因为我无法指定特定类型 class。挑战是我不知道那个。
我的问题是:我如何运行下面的查询,而不完全知道我得到了什么(制作特定类型的模型)?如果我需要那个模型,在缺少文档的情况下我如何 "make" 该模型?
我的代码:
var settings = new ConnectionSettings(new Uri(_path)).
BasicAuthentication(_username,_password);
var client = new ElasticClient(settings);
var es_query = new TermsQuery
{
Name = "named_query",
Boost = 1.1,
Field = "cvrNummer",
Terms = new string[] { "36406208" }
};
client.Search(es_query);
我只有文档:
curl -u "<brugernavn>:<password>" -XPOST http://URL -d'
{ "from" : 0, "size" : 1,
"query": {
"term": {
"cvrNummer": VALUE
}
}
}
编辑更多数据:
来自文档的文档模型:
curl -u "<brugernavn>:<password>" -XGET http://distribution.virk.dk/cvr-permanent/_mapping
完整搜索示例:
curl -u "<brugernavn>:<password>" -XPOST http://distribution.virk.dk/cvr-permanent/_search -d'
{ "from" : 0, "size" : 1,
"query": {
"term": {
"cvrNummer": 10961211
}
}
}
'
您可以将 "documentation" curl 请求转换为 C# api 语法,如下所示:
client.Search<dynamic>(s => s //dynamic because you don't know the structure
.From(0)
.Size(1)
.Index("cvr-permanent") // index you are searching, taken from url of curl
.AllTypes() // search all types in that index
.Query(q => q.Terms(t =>
t.Name("named_query")
.Boost(1.1f)
.Field("cvrNummer")
.Terms("36406208"))));
如果您不喜欢 dynamic
- 您可以使用 JObject
,如果您使用 dynamic
,这将是 Search
返回的真实类型:
var response = client.Search<JObject>(...);
然后您可以像这样访问匹配的文档:
foreach (var document in result.Documents) {
// if you used `JObject`:
Console.WriteLine(document["account_number"]);
// if you used `dynamic`:
Console.WriteLine(document.account_number);
}
如果您使用了 JObject
,您还可以在结果 JObject
上调用 ToString()
(因此,上面示例中的 document.ToString()
)以查看完整的 json 的返回文档,以便您了解其结构。