2017-01-06 6 views
0

У меня есть класс с Dictionary<string, List<string>> как один из участников. Я могу вставить данные с помощью automap, но не смог запросить документы с ключами и/или значениями в словаре. Если я использую запрос соответствия, он возвращает все в индексе. Я пробовал использовать термины, вложенный/не вложенный запрос и запрос QueryString, но ни один из них не возвращает какой-либо документ.NEST-отображение словаря <string, List <string>>

class ESSchema 
{ 
    [String(Index = FieldIndexOption.NotAnalyzed, Store = false)] 
    public string Machine { get; set; } 

    [String(Index = FieldIndexOption.NotAnalyzed, Store = false)] 
    public string Filename { get; set; } 

    [Number(NumberType.Long, Store = false)] 
    public long BatchNumber { get; set; } 

    [String(Index = FieldIndexOption.NotAnalyzed, Store = false)] 
    public string Environment { get; set; } = null; 

    [Nested] 
    //[Object(Store = false)] 
    public Dictionary<string, List<string>> KeysValues { get; set; } 
} 

Automap преобразует словарь к следующему картографированию который я не уверен, что правильное представление о том, что я ищу.

"keysValues": { 
    "type": "nested", 
    "properties": { 
     "comparer": { 
      "properties": { 

      }, 
      "type": "object" 
     }, 
     "count": { 
      "type": "integer" 
     }, 
     "keys": { 
      "properties": { 
       "count": { 
        "type": "integer" 
       } 
      }, 
      "type": "object" 
     }, 
     "values": { 
      "properties": { 
       "count": { 
        "type": "integer" 
       } 
      }, 
      "type": "object" 
     }, 
     "item": { 
      "type": "string" 
     } 
    } 
}, 
+0

Я немного изменил ваш вопрос. Вы должны [изменить] его далее, чтобы добавить актуальный вопрос - пока это всего лишь проблема, оставляя читателей угадать, что вы хотите конкретно. –

ответ

0

Когда Автоотображение, NEST by default will map one level down in the object graph. В случае Вашего Dictionary<string, List<string>> собственности, общественные свойства словаря в конечном итоге на карту, что является нежелательным.

Есть несколько способов это можно контролировать

1.Passing -1 для maxRecursion в AutoMap()

что приводит к

{ 
    "properties": { 
    "machine": { 
     "type": "string", 
     "store": false, 
     "index": "not_analyzed" 
    }, 
    "filename": { 
     "type": "string", 
     "store": false, 
     "index": "not_analyzed" 
    }, 
    "batchNumber": { 
     "type": "long", 
     "store": false 
    }, 
    "environment": { 
     "type": "string", 
     "store": false, 
     "index": "not_analyzed" 
    }, 
    "keysValues": { 
     "type": "object", 
     "store": false, 
     "properties": {} 
    } 
    } 
} 

2.Controlling отображение через свободно переопределение отображения

client.Map<ESSchema>(m => m 
    .AutoMap() 
    .Properties(p => p 
     .Object<Dictionary<string, List<string>>>(o => o 
      .Name(n => n.KeysValues) 
      .Store(false) 
     ) 
    ) 
); 

Использование .Properties() переопределяет любое выведенное отображение из Automapping.

Смежные вопросы