2017-11-28 22 views
1

まず、NEST 5.5.0を使用しています。Elasticsearch、クラスへのNESTマップの対応方法

Iは、リモートelasticsearchインデックスの次の使用している

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

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

     } 
    } 
    },   
} 
} 
} 
} 
} 

Iを次のよう

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以外の他の特性の束なし)インデックスにマッピングされています結果がマップされるはずの次のクラスもあります。

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

私はsearchResponse.Documentsで見たとき

"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)は次のようにcvrNummerに関する部分が見え、予想される結果(1結果)を、保持していますcvrNumberの値はnullです。

cvrNummerの値がsearchResponse.DocumentsのCompanyのインスタンスのcvrNumberにマップされていないため、私が間違っていることは何ですか?

あなたのご意見をお寄せいただきありがとうございます。

UPDATE

私が、成功せずに次のことを試してみました、まだ期待される結果を得たが、cvrNumberは(searchResponse.Documentsで)まだnullである:

[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") 
       ) 
      ) 
     ); 

更新

これは、クエリに以下のように変更して動作します:Company上POCOプロパティは(を見てみましょういずれかobject datatypeまたはnested datatypeとしてマッピングされなければならないよう

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

どのバージョンのElasticsearchをターゲットにしていますか? –

+0

5.x(ここでは、5.xはコメントには短すぎます) –

答えて

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

Vrvirksomhedが見えますnested objects in the Definitive Guide)、そのPOCOはcvrNumberと同様のプロパティを持ち、

と類似しています10
+0

Vrvirksomhed型をクエリに入れますか?var searchResponse = client.Search (s = > .AllTypes()。クエリ(q => q .Match(m => m .Field(f => f.cvrNumber).Query( "35954716"))));私はそれを試みましたが、まだ動作しません。(質問に更新してください) –

+0

いいえ、あなたは依然として 'Company'をクエリし、' f => f.Vrvirksomhed.cvrNumber'をフィールドの式として使用します。 –

+0

Omg 、それは動作し、私は光のいくつかを見たと思う。ありがとうございました! :) –

関連する問題