当前位置: 首页 > 面试题库 >

Elasticsearch,如何使NEST映射响应类

师腾
2023-03-14
问题内容

首先,我正在使用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")
     )
)
);

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

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

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

      }
    }
  },          
}
}
}
}
}

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

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

现在,搜索(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": [
...

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

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

预先感谢您的输入!

更新

我尝试以下操作均未成功,但仍然获得了预期的结果,但是cvrNumber仍然为null(在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")
                )
            )
        );

更新

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

 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,类似于

[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 Sense浏览器插件创建了以下索引,并且还创建了C#Nest Fluent映射。我可以在nGrams过滤器上表达Nest中除“ token_chars”以外的所有内容。我没有在C#嵌套上获得强类型属性来添加“ token_chars”。有人遇到过同样的问题吗? json和c#设置如下所示。请帮忙 我没有在C#嵌套上获得强类型属性来添加“ token

  • 主要内容:映射类型,动态映射,映射参数映射是存储在索引中的文档的大纲。它定义数据类型,如或文档和规则中存在的字段的字符串和格式,以控制动态添加的字段的映射。 例如, 请求正文 响应 字段数据类型 Elasticsearch支持文档中字段的多种不同数据类型。以下数据类型用于在Elasticsearch中存储字段 - 核心数据类型 - 这些是几乎所有系统支持的基本数据类型,如整数,长整数,双精度,短整型,字节,双精度,浮点型,字符串,日期

  • 问题内容: 我正在尝试使用Nest将多个记录插入数据库。使用IndexMany类插入确实可以,但是我还需要通过json字符串插入对象。 我确实在github上进行了查找,并找到了一些如何使用RAWclient的示例。在代码示例下面,我插入json。 一些其他信息: jsondata: var twitter: 我从数据库收到的结果: 有人知道这个问题可能是什么吗?还是我在json /代码中丢失了什

  • 问题内容: 我正在使用NEST库与ElasticSearch进行交互,并且试图找到一种基于非类型数据构建索引类型/嵌套对象的方法。该类型具有以下基本结构。 我想为NestedType的每个实例创建一个嵌套的对象/类型。因此,如果有两个NestedType实例,则将有两个嵌套对象。我可以从DynamicObject继承NestedType,将字典变成NEST然后正确映射的“真实”属性(即,将每个字典

  • 问题内容: 我正在尝试在Elasticsearch中映射多字段 第一个字段-“中”应包含所有索引列, 第二个字段-“ orig”应按原样包含文本。 例如: 一旦创建并查询,它就是它的外观。 当index =’no’时,是否意味着该字段将永远不会被索引? 问题答案: 对于不同的类型有不同的含义。由于现场在你的问题是它有以下根据意思。 no表示根本无法搜索(作为单个字段;它仍可能包含在_all中)。设

  • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。