データのインデックス付けにElasticSearchとNESTバージョン2を使用しています。私のデータオブジェクトは、同じタイプの子オブジェクトを持つことができます。私は、特定のフィールドを分析しないことを示す注釈を使用しています。この注釈は親オブジェクトに適用されますが、子オブジェクトには適用されません。私は子供インスタンスを含めるように私の注釈を変更する方法を把握しようとしています。FieldIndexOptionがネストされたオブジェクトに適用されていません
私はこのようなものがあります:次のように私は最初のインデックスを作成すると
public class Person {
public int Id {get; set;}
[String(Index = FieldIndexOption.NotAnalyzed)]
public string Code {get; set;}
public Person child {get; set;}
}
を:
client.Map<Person>(d => d.AutoMap());
マッピングは次のようになります。Iインデックス後
"people": {
"mappings": {
"person": {
"properties": {
"id": {
"type": "integer"
},
"code": {
"type": "string",
"index": "not_analyzed"
},
"child": {
"type": "object"
}
}
}
}
}
一部次のような文書:
これまでのclient.Index(person);
マッピングの変更:
"people": {
"mappings": {
"person": {
"properties": {
"id": {
"type": "integer"
},
"code": {
"type": "string",
"index": "not_analyzed"
},
"child": {
"properties": {
"id": {
"type": "integer"
},
"code": {
"type": "string"
}
}
}
}
}
}
}
は、私はこのような文書があるとしましょう:
{
"id": 100,
"code": "ABC100",
"child": {
"id": 123,
"code": "ABC123"
}
}
トップレベルの人のCodeフィールドが分析されていないされて何が起こります、このような検索を行うことができます:
GET people/_search
{
"query": {
"term": {
"code": "ABC100"
}
}
}
しかし、子のコードフィールドはデフォルトのアナライザなので、ABC123はabc123になります。
したがって、これらのすべては、私の文書を検索します:
GET people/_search
{
"query": {
"term": {
"child.id": 123
}
}
}
GET people/_search
{
"query": {
"term": {
"child.code": "abc123"
}
}
}
GET people/_search
{
"query": {
"match": {
"child.id": "ABC123"
}
}
}
しかし、これはしていません:
私は同じを持っているために、私のオブジェクトの注釈に確認する必要がありますどのような変化をGET people/_search
{
"query": {
"term": {
"child.code": "ABC123"
}
}
}
子供の人にフィールドオプションを適用しますか?私は実際には分析されていないいくつかのフィールドといくつかのレベルの深さを持っています。
'curl -XGET localhost:9200/people'で得られるマッピングを表示できますか? – Val
この情報を含めるために私の質問を編集しました。 – user55295