まず、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")
)
)
);
どのバージョンのElasticsearchをターゲットにしていますか? –
5.x(ここでは、5.xはコメントには短すぎます) –