在 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 的返回文档,以便您了解其结构。