Elasticsearch,如何使 NEST 地图响应类

Kim*_*ett 5 .net c# elasticsearch nest

首先,我使用的是NEST 5.5.0。

我对远程 elasticsearch-index 的使用如下:

var node = new Uri("http://distribution.virk.dk/cvr-permanent");

        var settings = new 
ConnectionSettings(node).DefaultIndex("virksomhed");

        settings.BasicAuthentication("username", "password");

        var client = new ElasticClient(settings);

        var searchResponse = client.Search<Company>(s => s
.AllTypes().Query(q => q
     .Match(m => m
        .Field(f => f.cvrNumber)
        .Query("35954716")
     )
)
);
Run Code Online (Sandbox Code Playgroud)

索引中的映射(除了 cvrNummer 之外没有一堆其他属性)如下:

{
"cvr-permanent-prod-20170205" : {
"mappings" : {
"virksomhed" : {
"_size" : {
  "enabled" : true
},
"properties" : {
  "Vrvirksomhed" : {
    "properties" : {

        "type" : "long"
      },
      "cvrNummer" : {
        "type" : "string"
      },             

      }
    }
  },          
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)

我还有以下类,结果应该映射到:

[ElasticsearchType(Name = "virksomhed")]
public class Company
{
    [Text(Name = "Vrvirksomhed.cvrNummer")]
    public string cvrNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,搜索 (searchResponse) 保存了预期结果(1 个结果),其中有关 cvrNummer 的部分如下所示:

"hits": {
"total": 1,
"max_score": 17.34601,
"hits": [
  {
    "_index": "cvr-permanent-prod-20170205",
    "_type": "virksomhed",
    "_id": "4000333383",
    "_score": 17.34601,
    "_source": {
      "Vrvirksomhed": {
        "cvrNummer": 35954716,
        "regNummer": [
          {
            "regnummer": "A/S35855",
            "periode": {
              "gyldigFra": "1956-06-01",
              "gyldigTil": "1999-10-18"
            },
            "sidstOpdateret": "2015-02-10T00:00:00.000+01:00"
          }
        ],
        "brancheAnsvarskode": null,
        "reklamebeskyttet": false,
        "navne": [
...
Run Code Online (Sandbox Code Playgroud)

但是,当我查看 searchResponse.Documents 时,我有正确的类型(公司),但 cvrNumber 的值为 null。

由于 cvrNummer 的值未映射到 searchResponse.Documents 中 Company 实例上的 cvrNumber ,您知道我做错了什么吗?

预先感谢您的意见!

更新

我尝试了以下方法但没有成功,仍然得到了预期的结果,但 cvrNumber 仍然为空(在 searchResponse.Documents 中):

[ElasticsearchType(Name = "virksomhed")]
public class Company
{
    [Object(Name = "Vrvirksomhed")]
    public Vrvirksomhed Vrvirksomhed { get; set; }
}

public class Vrvirksomhed
{
    [Text(Name = "cvrNummer")]
    public string cvrNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

随着查询:

 var searchResponse = client.Search<Vrvirksomhed>(s => s
            .AllTypes().Query(q => q
                .Match(m => m
                    .Field(f => f.cvrNumber)
                    .Query("35954716")
                )
            )
        );
Run Code Online (Sandbox Code Playgroud)

更新

它适用于对查询进行以下修改:

 var searchResponse = client.Search<Company>(s => s
            .AllTypes().Query(q => q
                .Match(m => m
                    .Field(f => f.Vrvirksomhed.cvrNumber)
                    .Query("35954716")
                )
            )
        );
Run Code Online (Sandbox Code Playgroud)

Rus*_*Cam 2

[ElasticsearchType(Name = "virksomhed")]
public class Company
{
    [Text(Name = "Vrvirksomhed.cvrNummer")]
    public string cvrNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Vrvirksomhed看起来它应该是Company映射为对象数据类型嵌套数据类型的 POCO 属性(请查看《权威指南》中的嵌套对象以了解差异),其中 POCO 有一个名为 的属性cvrNumber,类似于

[ElasticsearchType(Name = "virksomhed")]
public class Company
{
    [Object(Name = "Vrvirksomhed")]
    public Vrvirksomhed Vrvirksomhed { get; set; }
}

public class Vrvirksomhed
{
    [Text(Name = "cvrNummer")]
    public string cvrNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)