Elasticsearch,如何使NEST映射响应类 [英] Elasticsearch, how to make NEST map response to class

查看:144
本文介绍了Elasticsearch,如何使NEST映射响应类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我正在使用NEST 5.5.0.

First of all, I am using NEST 5.5.0.

我对远程elasticsearch-index有以下用途:

I have the following use of a remote 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")
     )
)
);

索引中的映射(除了cvrNummer之外没有其他属性)

The mappings in the index (without a bunch of other properties besides cvrNummer) are as follows:

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

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

      }
    }
  },          
}
}
}
}
}

我还有下面的类,应该将结果映射到该类:

I also have the following class which the result is supposed to be mapped to:

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

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

Now, the search (searchResponse) holds the expected results (1 result), where the part concerning cvrNummer looks as follows:

"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": [
...

但是,当我查找searchResponse.Documents时,我具有正确的类型(公司),但是cvrNumber的值为空.

However, when i look in searchResponse.Documents, I have the correct type (Company), but the value of cvrNumber is null.

有什么想法我在做错什么,因为cvrNummer的值未在searchResponse.Documents中的Company实例上映射到cvrNumber中?

Any ideas what I'm doing wrong, since the value of cvrNummer is not mapped into cvrNumber on the instance of Company in searchResponse.Documents?

谢谢您的输入!

更新

我尝试以下操作均未成功,但仍然获得了预期的结果,但是cvrNumber仍然为null(在searchResponse.Documents中):

I tried the following without success, still got the expected result, but cvrNumber is still null (in 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; }
}

查询:

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

更新

它对查询进行了以下修改:

It works with the following modifications to the query:

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

推荐答案

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

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

Vrvirksomhed looks like it should be a POCO property on Company mapped either as an object datatype or nested datatype (take a look at nested objects in the Definitive Guide for the differences), where that POCO has a property called cvrNumber, similar to

[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; }
}

这篇关于Elasticsearch,如何使NEST映射响应类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆